/** * Detach a role from the user * * @param $roleSlug * * @return bool * @throws CanException */ public function detachRole($roleSlug) { // todo - does this weed out wildcards? SlugContainer::validateOrDie($roleSlug, 'slug'); // make sure the role to detach is among the attached roles $allRoleSlugs = $this->slugsFor($this->getRoles()); if (!in_array($roleSlug, $allRoleSlugs, TRUE)) { return false; } $this->doDetachRole($roleSlug); $this->detachRolePermissions($roleSlug); return true; }
private static function description($item) { if (isset($item['description'])) { $description = $item['description']; } else { $description = static::name($item); } SlugContainer::validateOrDie($description, 'description'); return $description; }
public function detachPermissions(array $permissionSlugs) { SlugContainer::validateOrDie($this->slug, 'slug', 'The Role slug'); if (count($permissionSlugs) === 0) { return true; } $first = array_shift($permissionSlugs); SlugContainer::validateOrDie($first, 'slug', 'The Permission slug'); $query = DB::table(Config::get('can.role_permission_table'))->where('roles_slug', $this->slug)->where('permissions_slug', $first); foreach ($permissionSlugs as $slug) { SlugContainer::validateOrDie($slug, 'slug', 'The Permission slug'); $roleSlug = $this->slug; $query->orWhere(function ($q) use($roleSlug, $slug) { $q->where('roles_slug', $roleSlug)->where('permissions_slug', $slug); }); } try { $query->delete(); } catch (\Exception $e) { throw new \Exception('Failed to detach permissions: ' . $e->getMessage()); } return true; }