vlidanbina / laravel-roles
处理 Laravel 中角色、权限和级别的强大包。支持 Laravel 5.3 及更高版本
Requires
- php: >=5.6.4
- eklundkristoffer/seedster: ^3.0
- laravel/helpers: ^1.2
Requires (Dev)
- illuminate/support: ^5.8
- orchestra/testbench: ~3.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-08-29 05:50:05 UTC
README
目录
关于
一个强大的 Laravel 角色和权限处理包。支持 Laravel 5.3、5.4、5.5、5.6、5.7、5.8 和 6.0。
功能
安装
此包设置非常简单。只需几个步骤。
Composer
在终端中,从您的项目根目录运行
Laravel 5.8 及以上版本使用
composer require vildanbina/laravel-roles
- 注意:主要区别在于 Laravel 的用户表迁移从
$table->increments('id');
更改为$table->bigIncrements('id');
,这是在 Laravel 5.8 中进行的。
服务提供者
-
Laravel 5.5 及以上版本使用包自动发现功能,无需编辑
config/app.php
文件。 -
Laravel 5.4 及以下版本将包添加到您的应用程序服务提供者中
config/app.php
文件。
'providers' => [ ... /** * Third Party Service Providers... */ vildanbina\LaravelRoles\RolesServiceProvider::class, ],
发布所有资源
php artisan vendor:publish --tag=laravelroles
发布特定资源
php artisan vendor:publish --tag=laravelroles-config php artisan vendor:publish --tag=laravelroles-migrations php artisan vendor:publish --tag=laravelroles-seeds
HasRoleAndPermission 特性和契约
-
包含
HasRoleAndPermission
特性,并在您的User
模型中实现HasRoleAndPermission
契约。请参阅以下示例。 -
在您的
User
模型顶部包含use vildanbina\LaravelRoles\Traits\HasRoleAndPermission;
以下命名空间,并实现HasRoleAndPermission
特性。请参阅以下示例。
示例 User
模型特性和契约
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Notifications\Notifiable; use vildanbina\LaravelRoles\Traits\HasRoleAndPermission; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; use HasRoleAndPermission; // rest of your model ... }
迁移和种子
这使用的是 Laravel 中的默认用户表。您应该已经有用户表的迁移文件,并且已经迁移。
-
设置所需的表
php artisan migrate
-
更新
database\seeds\DatabaseSeeder.php
以包含种子。请参阅以下示例。
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; use Database\Seeds\PermissionsTableSeeder; use Database\Seeds\RolesTableSeeder; use Database\Seeds\ConnectRelationshipsSeeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); $this->call(PermissionsTableSeeder::class); $this->call(RolesTableSeeder::class); $this->call(ConnectRelationshipsSeeder::class); //$this->call('UsersTableSeeder'); Model::reguard(); } }
- 使用角色种子一组初始的权限、角色和用户。
composer dump-autoload php artisan db:seed
已种入角色
已种入权限
这就完成了!
从 bican 角色迁移
如果您从 bican/roles 迁移到 vildanbina/LaravelRoles,您需要更新一些内容。
- 将所有对
can
、canOne
和canAll
的调用更改为hasPermission
、hasOnePermission
和hasAllPermissions
。 - 将所有对
is
、isOne
和isAll
的调用更改为hasRole
、hasOneRole
和hasAllRoles
。
用法
创建角色
$adminRole = config('roles.models.role')::create([ 'name' => 'Admin', 'slug' => 'admin', 'description' => '', 'level' => 5, ]); $moderatorRole = config('roles.models.role')::create([ 'name' => 'Forum Moderator', 'slug' => 'forum.moderator', ]);
由于
Slugable
特性,如果您犯了一个错误,例如在 slug 参数中留下空格,它将被自动替换为点,因为使用了str_slug
函数。
附加、分离和同步角色
这非常简单。您从数据库中检索一个用户并调用 attachRole
方法。在 User
和 Role
模型之间存在 BelongsToMany
关系。
$user = config('roles.models.defaultUser')::find($id); $user->attachRole($adminRole); // you can pass whole object, or just an id $user->detachRole($adminRole); // in case you want to detach role $user->detachAllRoles(); // in case you want to detach all roles $user->syncRoles($roles); // you can pass Eloquent collection, or just an array of ids
为新注册用户分配用户角色
您可以在用户注册时通过更新文件 app\Http\Controllers\Auth\RegisterController.php
为用户分配角色。您可以通过包含所需的模型并修改 create()
方法来附加用户角色,在注册时为用户分配角色。以下是一个示例。
- 更新
create()
方法app\Http\Controllers\Auth\RegisterController.php
protected function create(array $data) { $user = config('roles.models.defaultUser')::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); $role = config('roles.models.role')::where('name', '=', 'User')->first(); //choose the default role upon user creation. $user->attachRole($role); return $user; }
检查角色
现在您可以检查用户是否具有所需的角色。
if ($user->hasRole('admin')) { // you can pass an id or slug // }
您还可以这样做。
if ($user->isAdmin()) { // }
当然,还有一种方法可以检查多个角色。
if ($user->hasRole(['admin', 'moderator'])) { /* | Or alternatively: | $user->hasRole('admin, moderator'), $user->hasRole('admin|moderator'), | $user->hasOneRole('admin, moderator'), $user->hasOneRole(['admin', 'moderator']), $user->hasOneRole('admin|moderator') */ // The user has at least one of the roles } if ($user->hasRole(['admin', 'moderator'], true)) { /* | Or alternatively: | $user->hasRole('admin, moderator', true), $user->hasRole('admin|moderator', true), | $user->hasAllRoles('admin, moderator'), $user->hasAllRoles(['admin', 'moderator']), $user->hasAllRoles('admin|moderator') */ // The user has all roles }
级别
在创建角色时,有一个可选参数 level
。默认情况下,它设置为 1
,但您可以覆盖它,然后您可以这样做:
if ($user->level() > 4) { // }
如果用户具有多个角色,方法
level
返回最高级。
Level
对继承权限也有很大影响。稍后介绍。
创建权限
这要归功于从 config('roles.models.permission')
调用的 Permission
模型,非常简单。
$createUsersPermission = config('roles.models.permission')::create([ 'name' => 'Create users', 'slug' => 'create.users', 'description' => '', // optional ]); $deleteUsersPermission = config('roles.models.permission')::create([ 'name' => 'Delete users', 'slug' => 'delete.users', ]);
附加、分离和同步权限
您可以将权限附加到角色或直接附加到特定用户(当然,也可以解除关联)。
$role = config('roles.models.role')::find($roleId); $role->attachPermission($createUsersPermission); // permission attached to a role $user = config('roles.models.defaultUser')::find($userId); $user->attachPermission($deleteUsersPermission); // permission attached to a user
$role->detachPermission($createUsersPermission); // in case you want to detach permission $role->detachAllPermissions(); // in case you want to detach all permissions $role->syncPermissions($permissions); // you can pass Eloquent collection, or just an array of ids $user->detachPermission($deleteUsersPermission); $user->detachAllPermissions(); $user->syncPermissions($permissions); // you can pass Eloquent collection, or just an array of ids
检查权限
if ($user->hasPermission('create.users')) { // you can pass an id or slug // } if ($user->canDeleteUsers()) { // }
您可以通过与角色相同的方式检查多个权限。您可以使用如 hasOnePermission
或 hasAllPermissions
的附加方法。
权限继承
级别较高的角色从级别较低的角色的角色中继承权限。
这是一个 魔法
的示例。
您有三个角色: user
、moderator
和 admin
。用户有阅读文章的权限,版主可以管理评论,管理员可以创建文章。用户的级别为 1,版主的级别为 2,管理员的级别为 3。这意味着版主和管理员也有阅读文章的权限,但管理员还可以管理评论。
如果您不想在应用程序中使用权限继承功能,只需在创建角色时忽略
level
参数即可。
实体检查
假设您有一篇文章,您想编辑它。这篇文章属于一个用户(文章表中有一个 user_id
列)。
use App\Article; $editArticlesPermission = config('roles.models.permission')::create([ 'name' => 'Edit articles', 'slug' => 'edit.articles', 'model' => 'App\Article', ]); $user->attachPermission($editArticlesPermission); $article = Article::find(1); if ($user->allowed('edit.articles', $article)) { // $user->allowedEditArticles($article) // }
此条件检查当前用户是否是文章的所有者。如果不是,它将查看用户权限中我们之前创建的行。
if ($user->allowed('edit.articles', $article, false)) { // now owner check is disabled // }
Blade 扩展
有四个 Blade 扩展。基本上,它是经典 if 语句的替代品。
@role('admin') // @if(Auth::check() && Auth::user()->hasRole('admin')) // user has admin role @endrole @permission('edit.articles') // @if(Auth::check() && Auth::user()->hasPermission('edit.articles')) // user has edit articles permissison @endpermission @level(2) // @if(Auth::check() && Auth::user()->level() >= 2) // user has level 2 or higher @endlevel @allowed('edit', $article) // @if(Auth::check() && Auth::user()->allowed('edit', $article)) // show edit button @endallowed @role('admin|moderator', true) // @if(Auth::check() && Auth::user()->hasRole('admin|moderator', true)) // user has admin and moderator role @else // something else @endrole
中间件
此包附带 VerifyRole
、VerifyPermission
和 VerifyLevel
中间件。自 1.7 版起,中间件别名已在 \vildanbina\LaravelRoles\RolesServiceProvider
中注册。您可以选择在 app/Http/Kernel.php
文件中添加它们,如下所示:
/** * The application's route middleware. * * @var array */ protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'role' => \vildanbina\LaravelRoles\Middleware\VerifyRole::class, 'permission' => \vildanbina\LaravelRoles\Middleware\VerifyPermission::class, 'level' => \vildanbina\LaravelRoles\Middleware\VerifyLevel::class, ];
现在您可以轻松保护您的路由。
Route::get('/', function () { // })->middleware('role:admin'); Route::get('/', function () { // })->middleware('permission:edit.articles'); Route::get('/', function () { // })->middleware('level:2'); // level >= 2 Route::get('/', function () { // })->middleware('role:admin', 'level:2'); // level >= 2 and Admin Route::group(['middleware' => ['role:admin']], function () { // });
如果出错,它将抛出 \vildanbina\LaravelRoles\App\Exceptions\RoleDeniedException
、\vildanbina\LaravelRoles\App\Exceptions\PermissionDeniedException
或 \vildanbina\LaravelRoles\App\Exceptions\LevelDeniedException
异常。
您可以在 app/Exceptions/Handler.php
文件中捕获这些异常并执行您想要的任何操作。
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response */ public function render($request, Exception $exception) { $userLevelCheck = $exception instanceof \vildanbina\LaravelRoles\App\Exceptions\RoleDeniedException || $exception instanceof \vildanbina\LaravelRoles\App\Exceptions\RoleDeniedException || $exception instanceof \vildanbina\LaravelRoles\App\Exceptions\PermissionDeniedException || $exception instanceof \vildanbina\LaravelRoles\App\Exceptions\LevelDeniedException; if ($userLevelCheck) { if ($request->expectsJson()) { return Response::json(array( 'error' => 403, 'message' => 'Unauthorized.' ), 403); } abort(403); } return parent::render($request, $exception); }
配置
- 您可以为模型更改连接、slug 分隔符、模型路径,并且还有一个方便的模拟功能。
- 有许多可配置的选项,已经扩展为可以通过
.env
文件变量进行配置。 - 由于这个原因,可能不需要直接编辑配置文件。
- 请参阅配置文件:roles.php。
<?php return [ /* |-------------------------------------------------------------------------- | Package Connection |-------------------------------------------------------------------------- | | You can set a different database connection for this package. It will set | new connection for models Role and Permission. When this option is null, | it will connect to the main database, which is set up in database.php | */ 'connection' => env('ROLES_DATABASE_CONNECTION', null), 'rolesTable' => env('ROLES_ROLES_DATABASE_TABLE', 'roles'), 'roleUserTable' => env('ROLES_ROLE_USER_DATABASE_TABLE', 'role_user'), 'permissionsTable' => env('ROLES_PERMISSIONS_DATABASE_TABLE', 'permissions'), 'permissionsRoleTable' => env('ROLES_PERMISSION_ROLE_DATABASE_TABLE', 'permission_role'), 'permissionsUserTable' => env('ROLES_PERMISSION_USER_DATABASE_TABLE', 'permission_user'), /* |-------------------------------------------------------------------------- | Slug Separator |-------------------------------------------------------------------------- | | Here you can change the slug separator. This is very important in matter | of magic method __call() and also a `Slugable` trait. The default value | is a dot. | */ 'separator' => env('ROLES_DEFAULT_SEPARATOR', '.'), /* |-------------------------------------------------------------------------- | Models |-------------------------------------------------------------------------- | | If you want, you can replace default models from this package by models | you created. Have a look at `vildanbina\LaravelRoles\Models\Role` model and | `vildanbina\LaravelRoles\Models\Permission` model. | */ 'models' => [ 'role' => env('ROLES_DEFAULT_ROLE_MODEL', vildanbina\LaravelRoles\Models\Role::class), 'permission' => env('ROLES_DEFAULT_PERMISSION_MODEL', vildanbina\LaravelRoles\Models\Permission::class), 'defaultUser' => env('ROLES_DEFAULT_USER_MODEL', config('auth.providers.users.model')), ], /* |-------------------------------------------------------------------------- | Roles, Permissions and Allowed "Pretend" |-------------------------------------------------------------------------- | | You can pretend or simulate package behavior no matter what is in your | database. It is really useful when you are testing you application. | Set up what will methods hasRole(), hasPermission() and allowed() return. | */ 'pretend' => [ 'enabled' => false, 'options' => [ 'hasRole' => true, 'hasPermission' => true, 'allowed' => true, ], ], /* |-------------------------------------------------------------------------- | Default Seeds |-------------------------------------------------------------------------- | | These are the default package seeds. You can seed the package built | in seeds without having to seed them. These seed directly from | the package. These are not the published seeds. | */ 'defaultSeeds' => [ 'PermissionsTableSeeder' => env('ROLES_SEED_DEFAULT_PERMISSIONS', true), 'RolesTableSeeder' => env('ROLES_SEED_DEFAULT_ROLES', true), 'ConnectRelationshipsSeeder' => env('ROLES_SEED_DEFAULT_RELATIONSHIPS', true), 'UsersTableSeeder' => env('ROLES_SEED_DEFAULT_USERS', false), ], /* |-------------------------------------------------------------------------- | Laravel Roles GUI Settings |-------------------------------------------------------------------------- | | This is the GUI for Laravel Roles to be able to CRUD them | easily and fast. This is optional and is not needed | for your application. | */ // Enable Optional Roles Gui 'rolesGuiEnabled' => env('ROLES_GUI_ENABLED', false), // Enable `auth` middleware 'rolesGuiAuthEnabled' => env('ROLES_GUI_AUTH_ENABLED', true), // Enable Roles GUI middleware 'rolesGuiMiddlewareEnabled' => env('ROLES_GUI_MIDDLEWARE_ENABLED', true), // Optional Roles GUI Middleware 'rolesGuiMiddleware' => env('ROLES_GUI_MIDDLEWARE', 'role:admin'), // User Permissions or Role needed to create a new role 'rolesGuiCreateNewRolesMiddlewareType' => env('ROLES_GUI_CREATE_ROLE_MIDDLEWARE_TYPE', 'role'), //permissions or roles 'rolesGuiCreateNewRolesMiddleware' => env('ROLES_GUI_CREATE_ROLE_MIDDLEWARE_TYPE', 'admin'), // admin, XXX. ... or perms.XXX // User Permissions or Role needed to create a new permission 'rolesGuiCreateNewPermissionMiddlewareType' => env('ROLES_GUI_CREATE_PERMISSION_MIDDLEWARE_TYPE', 'role'), //permissions or roles 'rolesGuiCreateNewPermissionsMiddleware' => env('ROLES_GUI_CREATE_PERMISSION_MIDDLEWARE_TYPE', 'admin'), // admin, XXX. ... or perms.XXX // The parent blade file 'bladeExtended' => env('ROLES_GUI_BLADE_EXTENDED', 'layouts.app'), // Blade Extension Placement 'bladePlacement' => env('ROLES_GUI_BLADE_PLACEMENT', 'yield'), 'bladePlacementCss' => env('ROLES_GUI_BLADE_PLACEMENT_CSS', 'inline_template_linked_css'), 'bladePlacementJs' => env('ROLES_GUI_BLADE_PLACEMENT_JS', 'inline_footer_scripts'), // Titles placement extend 'titleExtended' => env('ROLES_GUI_TITLE_EXTENDED', 'template_title'), // Switch Between bootstrap 3 `panel` and bootstrap 4 `card` classes 'bootstapVersion' => env('ROLES_GUI_BOOTSTRAP_VERSION', '4'), // Additional Card classes for styling - // See: https://bootstrap.ac.cn/docs/4.0/components/card/#background-and-color // Example classes: 'text-white bg-primary mb-3' 'bootstrapCardClasses' => env('ROLES_GUI_CARD_CLASSES', ''), // Bootstrap Tooltips 'tooltipsEnabled' => env('ROLES_GUI_TOOLTIPS_ENABLED', true), // jQuery 'enablejQueryCDN' => env('ROLES_GUI_JQUERY_CDN_ENABLED', true), 'JQueryCDN' => env('ROLES_GUI_JQUERY_CDN_URL', 'https://code.jqueryjs.cn/jquery-3.3.1.min.js'), // Selectize JS 'enableSelectizeJsCDN' => env('ROLES_GUI_SELECTIZEJS_CDN_ENABLED', true), 'SelectizeJsCDN' => env('ROLES_GUI_SELECTIZEJS_CDN_URL', 'https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/js/standalone/selectize.min.js'), 'enableSelectizeJs' => env('ROLES_GUI_SELECTIZEJS_ENABLED', true), 'enableSelectizeJsCssCDN' => env('ROLES_GUI_SELECTIZEJS_CSS_CDN_ENABLED', true), 'SelectizeJsCssCDN' => env('ROLES_GUI_SELECTIZEJS_CSS_CDN_URL', 'https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.6/css/selectize.min.css'), // Font Awesome 'enableFontAwesomeCDN' => env('ROLES_GUI_FONT_AWESOME_CDN_ENABLED', true), 'fontAwesomeCDN' => env('ROLES_GUI_FONT_AWESOME_CDN_URL', 'https://maxcdn.bootstrap.ac.cn/font-awesome/4.7.0/css/font-awesome.min.css'), // Flash Messaging 'builtInFlashMessagesEnabled' => env('ROLES_GUI_FLASH_MESSAGES_ENABLED', true), /* |-------------------------------------------------------------------------- | Laravel Roles API Settings |-------------------------------------------------------------------------- | | This is the API for Laravel Roles to be able to CRUD them | easily and fast via an API. This is optional and is | not needed for your application. | */ 'rolesApiEnabled' => env('ROLES_API_ENABLED', false), // Enable `auth` middleware 'rolesAPIAuthEnabled' => env('ROLES_API_AUTH_ENABLED', true), // Enable Roles API middleware 'rolesAPIMiddlewareEnabled' => env('ROLES_API_MIDDLEWARE_ENABLED', true), // Optional Roles API Middleware 'rolesAPIMiddleware' => env('ROLES_API_MIDDLEWARE', 'role:admin'), // User Permissions or Role needed to create a new role 'rolesAPICreateNewRolesMiddlewareType' => env('ROLES_API_CREATE_ROLE_MIDDLEWARE_TYPE', 'role'), //permissions or roles 'rolesAPICreateNewRolesMiddleware' => env('ROLES_API_CREATE_ROLE_MIDDLEWARE_TYPE', 'admin'), // admin, XXX. ... or perms.XXX // User Permissions or Role needed to create a new permission 'rolesAPICreateNewPermissionMiddlewareType' => env('ROLES_API_CREATE_PERMISSION_MIDDLEWARE_TYPE', 'role'), //permissions or roles 'rolesAPICreateNewPermissionsMiddleware' => env('ROLES_API_CREATE_PERMISSION_MIDDLEWARE_TYPE', 'admin'), // admin, XXX. ... or perms.XXX /* |-------------------------------------------------------------------------- | Laravel Roles GUI Datatables Settings |-------------------------------------------------------------------------- */ 'enabledDatatablesJs' => env('ROLES_GUI_DATATABLES_JS_ENABLED', false), 'datatablesJsStartCount' => env('ROLES_GUI_DATATABLES_JS_START_COUNT', 25), 'datatablesCssCDN' => env('ROLES_GUI_DATATABLES_CSS_CDN', 'https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css'), 'datatablesJsCDN' => env('ROLES_GUI_DATATABLES_JS_CDN', 'https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js'), 'datatablesJsPresetCDN' => env('ROLES_GUI_DATATABLES_JS_PRESET_CDN', 'https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js'), /* |-------------------------------------------------------------------------- | Laravel Roles Package Integration Settings |-------------------------------------------------------------------------- */ 'laravelUsersEnabled' => env('ROLES_GUI_LARAVEL_ROLES_ENABLED', false), ];
环境文件
# Roles Default Models
ROLES_DEFAULT_USER_MODEL=App\User
ROLES_DEFAULT_ROLE_MODEL=vildanbina\LaravelRoles\Models\Role
ROLES_DEFAULT_PERMISSION_MODEL=vildanbina\LaravelRoles\Models\Permission
# Roles database information
ROLES_DATABASE_CONNECTION=null
ROLES_ROLES_DATABASE_TABLE=roles
ROLES_ROLE_USER_DATABASE_TABLE=role_user
ROLES_PERMISSIONS_DATABASE_TABLE=permissions
ROLES_PERMISSION_ROLE_DATABASE_TABLE=permission_role
ROLES_PERMISSION_USER_DATABASE_TABLE=permission_user
# Roles Misc Settings
ROLES_DEFAULT_SEPARATOR='.'
# Roles Database Seeder Settings
ROLES_SEED_DEFAULT_PERMISSIONS=true
ROLES_SEED_DEFAULT_ROLES=true
ROLES_SEED_DEFAULT_RELATIONSHIPS=true
ROLES_SEED_DEFAULT_USERS=false
# Roles GUI Settings
ROLES_GUI_ENABLED=false
ROLES_GUI_AUTH_ENABLED=true
ROLES_GUI_MIDDLEWARE_ENABLED=true
ROLES_GUI_MIDDLEWARE='role:admin'
ROLES_GUI_CREATE_ROLE_MIDDLEWARE_TYPE='role'
ROLES_GUI_CREATE_ROLE_MIDDLEWARE_TYPE='admin'
ROLES_GUI_CREATE_PERMISSION_MIDDLEWARE_TYPE='role'
ROLES_GUI_CREATE_PERMISSION_MIDDLEWARE_TYPE='admin'
ROLES_GUI_BLADE_EXTENDED='layouts.app'
ROLES_GUI_TITLE_EXTENDED='template_title'
ROLES_GUI_LARAVEL_ROLES_ENABLED=false
ROLES_GUI_TOOLTIPS_ENABLED=true
ROLES_GUI_DATATABLES_JS_ENABLED=false
更多信息
有关更多信息,请参阅 HasRoleAndPermission 协议。
可选 GUI 路由
+--------+-----------+---------------------------------+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------+---------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+---------------------------------+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------+---------------------+
| | GET|HEAD | permission-deleted/{id} | laravelroles::permission-show-deleted | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@show | web,auth,role:admin |
| | DELETE | permission-destroy/{id} | laravelroles::permission-item-destroy | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@destroy | web,auth,role:admin |
| | PUT | permission-restore/{id} | laravelroles::permission-restore | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@restorePermission | web,auth,role:admin |
| | POST | permissions | laravelroles::permissions.store | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@store | web,auth,role:admin |
| | GET|HEAD | permissions | laravelroles::permissions.index | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@index | web,auth,role:admin |
| | GET|HEAD | permissions-deleted | laravelroles::permissions-deleted | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@index | web,auth,role:admin |
| | DELETE | permissions-deleted-destroy-all | laravelroles::destroy-all-deleted-permissions | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@destroyAllDeletedPermissions | web,auth,role:admin |
| | POST | permissions-deleted-restore-all | laravelroles::permissions-deleted-restore-all | vildanbina\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@restoreAllDeletedPermissions | web,auth,role:admin |
| | GET|HEAD | permissions/create | laravelroles::permissions.create | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@create | web,auth,role:admin |
| | PUT|PATCH | permissions/{permission} | laravelroles::permissions.update | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@update | web,auth,role:admin |
| | GET|HEAD | permissions/{permission} | laravelroles::permissions.show | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@show | web,auth,role:admin |
| | DELETE | permissions/{permission} | laravelroles::permissions.destroy | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@destroy | web,auth,role:admin |
| | GET|HEAD | permissions/{permission}/edit | laravelroles::permissions.edit | vildanbina\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@edit | web,auth,role:admin |
| | GET|HEAD | role-deleted/{id} | laravelroles::role-show-deleted | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@show | web,auth,role:admin |
| | DELETE | role-destroy/{id} | laravelroles::role-item-destroy | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@destroy | web,auth,role:admin |
| | PUT | role-restore/{id} | laravelroles::role-restore | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@restoreRole | web,auth,role:admin |
| | POST | roles | laravelroles::roles.store | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@store | web,auth,role:admin |
| | GET|HEAD | roles | laravelroles::roles.index | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@index | web,auth,role:admin |
| | GET|HEAD | roles-deleted | laravelroles::roles-deleted | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@index | web,auth,role:admin |
| | DELETE | roles-deleted-destroy-all | laravelroles::destroy-all-deleted-roles | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@destroyAllDeletedRoles | web,auth,role:admin |
| | POST | roles-deleted-restore-all | laravelroles::roles-deleted-restore-all | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@restoreAllDeletedRoles | web,auth,role:admin |
| | GET|HEAD | roles/create | laravelroles::roles.create | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@create | web,auth,role:admin |
| | DELETE | roles/{role} | laravelroles::roles.destroy | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@destroy | web,auth,role:admin |
| | PUT|PATCH | roles/{role} | laravelroles::roles.update | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@update | web,auth,role:admin |
| | GET|HEAD | roles/{role} | laravelroles::roles.show | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@show | web,auth,role:admin |
| | GET|HEAD | roles/{role}/edit | laravelroles::roles.edit | vildanbina\LaravelRoles\App\Http\Controllers\LaravelRolesController@edit | web,auth,role:admin |
+--------+-----------+---------------------------------+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------+---------------------+
屏幕截图
文件树
├── .env.example ├── .env.travis ├── .gitignore ├── .travis.yml ├── LICENSE ├── composer.json ├── phpunit.xml ├── readme.md └── src ├── App │ ├── Exceptions │ │ ├── AccessDeniedException.php │ │ ├── LevelDeniedException.php │ │ ├── PermissionDeniedException.php │ │ └── RoleDeniedException.php │ ├── Http │ │ ├── Controllers │ │ │ ├── Api │ │ │ │ └── LaravelRolesApiController.php │ │ │ ├── LaravelPermissionsController.php │ │ │ ├── LaravelRolesController.php │ │ │ ├── LaravelRolesDeletedController.php │ │ │ └── LaravelpermissionsDeletedController.php │ │ ├── Middleware │ │ │ ├── VerifyLevel.php │ │ │ ├── VerifyPermission.php │ │ │ └── VerifyRole.php │ │ └── Requests │ │ ├── StorePermissionRequest.php │ │ ├── StoreRoleRequest.php │ │ ├── UpdatePermissionRequest.php │ │ └── UpdateRoleRequest.php │ └── Services │ ├── PermissionFormFields.php │ └── RoleFormFields.php ├── Contracts │ ├── HasRoleAndPermission.php │ ├── PermissionHasRelations.php │ └── RoleHasRelations.php ├── Models │ ├── Permission.php │ └── Role.php ├── RolesFacade.php ├── RolesServiceProvider.php ├── Traits │ ├── DatabaseTraits.php │ ├── HasRoleAndPermission.php │ ├── PermissionHasRelations.php │ ├── RoleHasRelations.php │ ├── RolesAndPermissionsHelpersTrait.php │ ├── RolesUsageAuthTrait.php │ └── Slugable.php ├── config │ └── roles.php ├── database │ ├── Migrations │ │ ├── 2016_01_15_105324_create_roles_table.php │ │ ├── 2016_01_15_114412_create_role_user_table.php │ │ ├── 2016_01_26_115212_create_permissions_table.php │ │ ├── 2016_01_26_115523_create_permission_role_table.php │ │ └── 2016_02_09_132439_create_permission_user_table.php │ └── Seeds │ ├── DefaultConnectRelationshipsSeeder.php │ ├── DefaultPermissionsTableSeeder.php │ ├── DefaultRolesTableSeeder.php │ ├── DefaultUsersTableSeeder.php │ └── publish │ ├── ConnectRelationshipsSeeder.php │ ├── PermissionsTableSeeder.php │ ├── RolesTableSeeder.php │ └── UsersTableSeeder.php ├── resources │ ├── lang │ │ └── en │ │ └── laravelroles.php │ └── views │ └── laravelroles │ ├── cards │ │ ├── permissions-card.blade.php │ │ └── roles-card.blade.php │ ├── crud │ │ ├── dashboard.blade.php │ │ ├── permissions │ │ │ ├── create.blade.php │ │ │ ├── deleted │ │ │ │ └── index.blade.php │ │ │ ├── edit.blade.php │ │ │ └── show.blade.php │ │ └── roles │ │ ├── create.blade.php │ │ ├── deleted │ │ │ └── index.blade.php │ │ ├── edit.blade.php │ │ └── show.blade.php │ ├── forms │ │ ├── create-permission-form.blade.php │ │ ├── create-role-form.blade.php │ │ ├── delete-sm.blade.php │ │ ├── destroy-all-permissions.blade.php │ │ ├── destroy-all-roles.blade.php │ │ ├── destroy-sm.blade.php │ │ ├── edit-permission-form.blade.php │ │ ├── edit-role-form.blade.php │ │ ├── partials │ │ │ ├── permission-desc-input.blade.php │ │ │ ├── permission-name-input.blade.php │ │ │ ├── permission-slug-input.blade.php │ │ │ ├── permissions-model-select.blade.php │ │ │ ├── role-desc-input.blade.php │ │ │ ├── role-level-input.blade.php │ │ │ ├── role-name-input.blade.php │ │ │ ├── role-permissions-select.blade.php │ │ │ └── role-slug-input.blade.php │ │ ├── permission-form.blade.php │ │ ├── restore-all-permissions.blade.php │ │ ├── restore-all-roles.blade.php │ │ ├── restore-item.blade.php │ │ └── role-form.blade.php │ ├── modals │ │ └── confirm-modal.blade.php │ ├── partials │ │ ├── bs-visibility-css.blade.php │ │ ├── flash-messages.blade.php │ │ ├── form-status.blade.php │ │ └── styles.blade.php │ ├── scripts │ │ ├── confirm-modal.blade.php │ │ ├── datatables.blade.php │ │ ├── form-inputs-helpers.blade.php │ │ ├── selectize.blade.php │ │ ├── selectizePermission.blade.php │ │ └── tooltips.blade.php │ └── tables │ ├── permission-items-table.blade.php │ ├── permissions-table.blade.php │ ├── role-items-table.blade.php │ └── roles-table.blade.php └── routes ├── api.php └── web.php
- 可以使用 brew 安装树形命令:
brew install tree
- 使用命令
tree -a -I '.git|node_modules|vendor|storage|tests'
生成文件树。
提交问题
在提交问题之前,有一些考虑事项。
- 本项目中的星星代表支持,也是向所有贡献者表示感谢的一种方式。如果您提交了一个没有星星的问题,您的可能被无考虑地关闭。感谢您的理解和支持。你们都是超级棒的!
- 阅读说明并确保所有步骤都正确执行。
- 检查该问题是否与您的开发环境配置无关。
- 提供复现步骤。
- 尝试调查该问题,如果您有解决方案,请提交拉取请求。
- 表明您已经尝试调查了问题。
- 检查您报告的问题是否为之前已报告问题的重复。
- 遵循这些说明表明您已尝试。
- 如果您有任何问题,请发送电子邮件至vildanbina@gmail.com
- 需要帮助?我在Slack上尽力提供帮助:https://opensourcehelpgroup.slack.com
- 请注意,这是一个开源项目,我在提交问题时免费提供给社区。
信用说明
HasRoleAndPermission 特性和合约是romanbican/roles的一个改编。我喜欢他的方法,所以我就使用了。
许可证
此软件包是免费软件,根据MIT 许可证的条款分发。享受吧!