jeremykenedy / laravel-roles
一个强大的Laravel角色和权限处理包。支持Laravel 5.3到11。
Requires
- php: ^7.2|^8.0.2|^8.1
- eklundkristoffer/seedster: ^7.0
- laravel/framework: 5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*|^9.0|^10.0
- laravel/helpers: ^1.5
Requires (Dev)
- illuminate/support: ^8.5|^9.0|^10.0
- laravel/laravel: ^8.0|^9.0|^10.0
- laravel/tinker: ^2.7
- orchestra/testbench: ^6.0|^7.0|^8.0
- dev-master
- v10.0.0
- v9.1.1
- v9.1.0
- v9.0.0
- v8.1.0
- v8.0.0
- v7.0.0
- v6.0.0
- v5.1.0
- v5.0.0
- v4.0.0
- v3.8.0
- v3.7.0
- v3.6.0
- v3.5.0
- v3.4.0
- v3.3.0
- v3.2.1
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.1
- v3.0.0
- v2.9.0
- v2.8.0
- v2.7.0
- v2.6.0
- v2.5.0
- v2.4.0
- v2.3.4
- v2.3.3
- v2.3.1
- v2.3.0
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.1
- v2.0.0
- v1.7.0
- v1.6.0
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.1
- v1.0.1
- v1.0.0
- dev-analysis-KoB45Q
- dev-analysis-0gJweE
- dev-analysis-nN9eE1
- dev-analysis-XVepPw
- dev-development
This package is auto-updated.
Last update: 2024-09-11 08:30:38 UTC
README
Laravel Roles
一个强大的Laravel角色和权限处理包。支持Laravel 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 6.0, 7.0, 和 8.0+。
目录
功能
安装
此包设置非常简单。只有几个步骤。
Composer
在终端中,从项目的根目录运行
Laravel 5.8及以上版本使用
composer require jeremykenedy/laravel-roles
Laravel 5.7及以下版本使用
composer require jeremykenedy/laravel-roles:1.4.0
- 注意:主要区别是Laravel 5.8及更高版本的users表迁移从
$table->increments('id');
更改为$table->bigIncrements('id');
。
服务提供者
-
Laravel 5.5及以上版本使用包自动发现功能,无需编辑
config/app.php
文件。 -
Laravel 5.4及以下版本将包添加到
config/app.php
文件中的应用程序服务提供者中。
'providers' => [ ... /** * Third Party Service Providers... */ jeremykenedy\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 php artisan vendor:publish --tag=laravelroles-views php artisan vendor:publish --tag=laravelroles-lang
HasRoleAndPermission 特性和契约
-
在
User
模型中包含HasRoleAndPermission
特性和实现HasRoleAndPermission
契约。下面是示例。 -
在
User
模型的顶部包含use jeremykenedy\LaravelRoles\Traits\HasRoleAndPermission;
并在下面实现HasRoleAndPermission
特性。下面是示例。
示例 User
模型特性和契约
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Notifications\Notifiable; use jeremykenedy\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\Seeders\PermissionsTableSeeder; use Database\Seeders\RolesTableSeeder; use Database\Seeders\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 迁移到 jeremykenedy/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
对继承权限也有很大的影响。稍后我们会谈到它。
创建权限
这要归功于 Permission
模型,它通过 config('roles.models.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。启用继承后,版主和管理员也可以阅读文章,管理员还可以管理评论。
如果您不希望应用程序中启用权限继承功能,请将配置值 roles.inheritance(或其对应的 .env 参数,ROLES_INHERITANCE)设置为 false。或者,在创建角色时,简单地忽略
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 版本开始,中间件别名已在 \jeremykenedy\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' => \jeremykenedy\LaravelRoles\App\Http\Middleware\VerifyRole::class, 'permission' => \jeremykenedy\LaravelRoles\App\Http\Middleware\VerifyPermission::class, 'level' => \jeremykenedy\LaravelRoles\App\Http\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 () { // });
如果发生错误,它将抛出 \jeremykenedy\LaravelRoles\App\Exceptions\RoleDeniedException
、\jeremykenedy\LaravelRoles\App\Exceptions\PermissionDeniedException
或 \jeremykenedy\LaravelRoles\App\Exceptions\LevelDeniedException
异常。
您可以在 app/Exceptions/Handler.php
文件中捕获这些异常并执行任何操作。
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Throwable $e * @return \Illuminate\Http\Response */ public function render($request, Throwable $e) { $userLevelCheck = $e instanceof \jeremykenedy\LaravelRoles\App\Exceptions\RoleDeniedException || $e instanceof \jeremykenedy\LaravelRoles\App\Exceptions\PermissionDeniedException || $e instanceof \jeremykenedy\LaravelRoles\App\Exceptions\LevelDeniedException; if ($userLevelCheck) { if ($request->expectsJson()) { return Response::json(array( 'error' => 403, 'message' => 'Unauthorized.' ), 403); } abort(403); } return parent::render($request, $e); }
配置
- 您可以更改模型的连接、短横线分隔符、模型路径,还有一个方便的模拟功能。
- 有许多可配置的选项已扩展为能够通过
.env
文件变量进行配置。 - 由于这个原因,直接编辑配置文件可能不是必需的。
- 请参阅配置文件:[roles.php](https://github.com/jeremykenedy/laravel-roles/blob/master/src/config/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 `jeremykenedy\LaravelRoles\Models\Role` model and | `jeremykenedy\LaravelRoles\Models\Permission` model. | */ 'models' => [ 'role' => env('ROLES_DEFAULT_ROLE_MODEL', jeremykenedy\LaravelRoles\Models\Role::class), 'permission' => env('ROLES_DEFAULT_PERMISSION_MODEL', jeremykenedy\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 Migrations |-------------------------------------------------------------------------- | | These are the default package migrations. If you publish the migrations | to your project, then this is not necessary and should be disabled. This | will enable our default migrations. | */ 'defaultMigrations' => [ 'enabled' => env('ROLES_MIGRATION_DEFAULT_ENABLED', false), ], /* |-------------------------------------------------------------------------- | 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=jeremykenedy\LaravelRoles\Models\Role
ROLES_DEFAULT_PERMISSION_MODEL=jeremykenedy\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 Migrations Settings
ROLES_MIGRATION_DEFAULT_ENABLED=true
# 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](https://github.com/jeremykenedy/laravel-roles/blob/master/src/Contracts/HasRoleAndPermission.php) 合同。
可选GUI路由
+--------+-----------+---------------------------------+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------+---------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+---------------------------------+-----------------------------------------------+-----------------------------------------------------------------------------------------------------------------+---------------------+
| | GET|HEAD | permission-deleted/{id} | laravelroles::permission-show-deleted | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@show | web,auth,role:admin |
| | DELETE | permission-destroy/{id} | laravelroles::permission-item-destroy | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@destroy | web,auth,role:admin |
| | PUT | permission-restore/{id} | laravelroles::permission-restore | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@restorePermission | web,auth,role:admin |
| | POST | permissions | laravelroles::permissions.store | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@store | web,auth,role:admin |
| | GET|HEAD | permissions | laravelroles::permissions.index | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@index | web,auth,role:admin |
| | GET|HEAD | permissions-deleted | laravelroles::permissions-deleted | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@index | web,auth,role:admin |
| | DELETE | permissions-deleted-destroy-all | laravelroles::destroy-all-deleted-permissions | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@destroyAllDeletedPermissions | web,auth,role:admin |
| | POST | permissions-deleted-restore-all | laravelroles::permissions-deleted-restore-all | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelpermissionsDeletedController@restoreAllDeletedPermissions | web,auth,role:admin |
| | GET|HEAD | permissions/create | laravelroles::permissions.create | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@create | web,auth,role:admin |
| | PUT|PATCH | permissions/{permission} | laravelroles::permissions.update | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@update | web,auth,role:admin |
| | GET|HEAD | permissions/{permission} | laravelroles::permissions.show | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@show | web,auth,role:admin |
| | DELETE | permissions/{permission} | laravelroles::permissions.destroy | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@destroy | web,auth,role:admin |
| | GET|HEAD | permissions/{permission}/edit | laravelroles::permissions.edit | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelPermissionsController@edit | web,auth,role:admin |
| | GET|HEAD | role-deleted/{id} | laravelroles::role-show-deleted | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@show | web,auth,role:admin |
| | DELETE | role-destroy/{id} | laravelroles::role-item-destroy | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@destroy | web,auth,role:admin |
| | PUT | role-restore/{id} | laravelroles::role-restore | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@restoreRole | web,auth,role:admin |
| | POST | roles | laravelroles::roles.store | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@store | web,auth,role:admin |
| | GET|HEAD | roles | laravelroles::roles.index | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@index | web,auth,role:admin |
| | GET|HEAD | roles-deleted | laravelroles::roles-deleted | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@index | web,auth,role:admin |
| | DELETE | roles-deleted-destroy-all | laravelroles::destroy-all-deleted-roles | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@destroyAllDeletedRoles | web,auth,role:admin |
| | POST | roles-deleted-restore-all | laravelroles::roles-deleted-restore-all | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesDeletedController@restoreAllDeletedRoles | web,auth,role:admin |
| | GET|HEAD | roles/create | laravelroles::roles.create | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@create | web,auth,role:admin |
| | DELETE | roles/{role} | laravelroles::roles.destroy | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@destroy | web,auth,role:admin |
| | PUT|PATCH | roles/{role} | laravelroles::roles.update | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@update | web,auth,role:admin |
| | GET|HEAD | roles/{role} | laravelroles::roles.show | jeremykenedy\LaravelRoles\App\Http\Controllers\LaravelRolesController@show | web,auth,role:admin |
| | GET|HEAD | roles/{role}/edit | laravelroles::roles.edit | jeremykenedy\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'
提交问题
在提交问题之前,有一些考虑因素:
- 你们都很棒!
- 阅读说明 并确保所有步骤都 正确执行。
- 检查 问题是否不是 特定于您的开发环境 设置。
- 提供 复现步骤。
- 尝试解决这个问题,如果您有解决方案,请提交一个pull request。
- 证明您已经尝试解决这个问题。
- 检查您报告的问题是否是之前报告过的重复问题。
- 按照这些说明表明您已经尝试过。
- 如果您有任何问题,请给我发送电子邮件到 jeremykenedy@gmail.com
- 需要帮助吗?我可以在Slack上尽力帮助您:https://opensourcehelpgroup.slack.com
- 请理解,这是一个开源项目,我在打开问题时免费提供给社区。
信用说明
HasRoleAndPermission 特性和合约是基于 romanbican/roles 的改编。我喜欢他使用的方法,所以我也采用了。
许可证
此软件包是免费软件,根据MIT许可证条款分发。祝您使用愉快!