/** * Compose the view. * * @param \Illuminate\Contracts\View\View $view */ public function composeRolePermissions(View $view) { $permissions = $this->cacheResults('permissions.form', function () { return Permission::with(['group'])->orderBy('group_id', 'desc')->get(); }); $view->with('permissions', $permissions); }
/** * Sync the roles. * * @todo: Refactor this method */ private function syncRoles() { $permissions = Permission::all(); $roles = ['blog-moderators' => 'blog.', 'blog-authors' => 'blog.posts.']; foreach ($roles as $roleSlug => $permissionSlug) { /** @var \Arcanesoft\Auth\Models\Role $role */ $role = Role::where('slug', $roleSlug)->first(); $ids = $permissions->filter(function (Permission $permission) use($permissionSlug) { return starts_with($permission->slug, $permissionSlug); })->lists('id')->toArray(); $role->permissions()->sync($ids); } }
/** * Get the groups filters data. * * @return \Illuminate\Support\Collection */ private function getFilters() { $filters = new Collection(); foreach ($this->getCachedPermissionGroups() as $group) { /** @var \Arcanesoft\Auth\Models\PermissionsGroup $group */ $filters->push(['name' => $group->name, 'params' => [$group->hashed_id]]); } // Custom Permission group //---------------------------------- if (Permission::where('group_id', 0)->count()) { $filters->push(['name' => 'Custom', 'params' => [hasher()->encode(0)]]); } return $filters; }
/** * Sync the roles. * * @todo: Refactor this method */ private function syncRoles() { /** @var \Illuminate\Database\Eloquent\Collection $permissions */ $permissions = Permission::all(); $roles = ['logviewer-manager' => 'foundation.logviewer.']; foreach ($roles as $roleSlug => $permissionSlug) { /** @var \Arcanesoft\Auth\Models\Role $role */ $role = Role::where('slug', $roleSlug)->first(); $ids = $permissions->filter(function (Permission $permission) use($permissionSlug) { return Str::startsWith($permission->slug, $permissionSlug); })->pluck('id')->toArray(); $role->permissions()->sync($ids); } }
/** * Map routes. * * @param \Illuminate\Contracts\Routing\Registrar $router */ public function map(Registrar $router) { $this->bind('auth_permission', function ($hashedId) { return Permission::firstHashedOrFail($hashedId); }); $this->bind('auth_permissions_group', function ($hashedId) { return PermissionsGroup::firstHashedOrFail($hashedId); }); $this->group(['prefix' => 'permissions', 'as' => 'permissions.'], function () { $this->get('/', 'PermissionsController@index')->name('index'); // auth::foundation.permissions.index $this->get('group/{auth_permissions_group}', 'PermissionsController@group')->name('group'); // auth::foundation.permissions.group $this->group(['prefix' => '{auth_permission}'], function () { $this->get('/', 'PermissionsController@show')->name('show'); // auth::foundation.permissions.show $this->delete('roles/{auth_role}/detach', 'PermissionsController@detachRole')->name('roles.detach'); // auth::foundation.permissions.roles.detach }); }); }
/** * Sync the admin role with all permissions. */ protected function syncAdminRole() { /** @var \Arcanesoft\Auth\Models\Role $admin */ $admin = Role::admin()->first(); $admin->permissions()->sync(Permission::all()->pluck('id')->toArray()); }
/** * Get all cached permissions. * * @return \Illuminate\Database\Eloquent\Collection */ protected function getCachedPermissions() { return $this->cacheResults('permissions.all', function () { return Permission::all(); }); }
/** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return ['name' => 'required|min:3', 'slug' => 'required|min:3|unique:roles,slug', 'description' => 'required|min:10', 'permissions' => 'required|array|in:' . Permission::getIds()->implode(',')]; }