andrey-helldar / laravel-roles
Requires
- php: ^7.1.3|^8.0
- doctrine/dbal: ^2.6
- illuminate/auth: ^5.5|^6.0|^7.0|^8.0
- illuminate/cache: ^5.5|^6.0|^7.0|^8.0
- illuminate/console: ^5.5|^6.0|^7.0|^8.0
- illuminate/contracts: ^5.5|^6.0|^7.0|^8.0
- illuminate/database: ^5.5|^6.0|^7.0|^8.0
- illuminate/http: ^5.5|^6.0|^7.0|^8.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0
- symfony/http-kernel: ^3.3|^4.0|^5.0
Requires (Dev)
- orchestra/testbench: ^3.5|^4.0|^5.0|^6.0
- phpunit/phpunit: ^6.0|^7.0|^8.0|^9.0
Suggests
- symfony/thanks: Give thanks (in the form of a GitHub) to your fellow PHP package maintainers
This package is auto-updated.
Last update: 2020-09-24 10:57:32 UTC
README
Laravel 5.5 及以上版本的基本角色和权限处理。
此包已废弃,不再维护。作者建议使用 spatie/laravel-permission 包。
内容
安装
如果您是从旧版本升级的,您可以在升级指南中查看更改列表
要获取最新版本的 Laravel Roles,只需使用 Composer 引入项目
$ composer require andrey-helldar/laravel-roles
或者手动更新 composer.json
中的 require
块并运行 composer update
。
{ "require-dev": { "andrey-helldar/laravel-roles": "^2.4" } }
现在您可以通过运行以下命令发布配置和迁移文件
php artisan vendor:publish --provider="Helldar\Roles\ServiceProvider"
您可以通过运行迁移来创建数据库表
php artisan migrate
此命令将创建 roles
、permissions
、user_role
和 role_permission
表。
使用
用户模型
首先,将 Helldar\Roles\Traits\HasRoles
特性添加到您的 User
模型中
use Illuminate\Foundation\Auth\User as Authenticatable; use Helldar\Roles\Traits\HasRoles; class User extends Authenticatable { use HasRoles; // ... }
中间件
您可以在 app/Http/Kernel.php
文件的 $routeMiddleware
中添加中间件
use Helldar\Roles\Http\Middleware\Permission; use Helldar\Roles\Http\Middleware\Permissions; use Helldar\Roles\Http\Middleware\Role; use Helldar\Roles\Http\Middleware\Roles; protected $routeMiddleware = [ // ... 'role' => Role::class, // Checks for the entry of one of the specified permissions. 'roles' => Roles::class, // Checks the entry of all of the specified permissions. 'permission' => Permission::class, // Checks for the occurrence of one of the specified roles. 'permissions' => Permissions::class, // Checks the entry of all of the specified roles. ]
现在您可以检查是否满足其中一个条件
// Example, user has been a `foo` role and a `baz` permission // success access app('router') ->middleware('role:foo,bar', 'permission:foo,bar') ->get(...) // success access app('router') ->middleware('role:foo,bar') ->get(...) // failed access app('router') ->middleware('permission:foo,bar') ->get(...)
或者检查所有条件的入口
// Example, user has been a `foo` role and a `baz` permission // failed access app('router') ->middleware('roles:foo,bar', 'permissions:foo,bar') ->get(...) // failed access app('router') ->middleware('roles:foo,bar') ->get(...) // success access app('router') ->middleware('roles:foo') ->get(...) // failed access app('router') ->middleware('permissions:foo,bar') ->get(...) // success access app('router') ->middleware('permissions:baz') ->get(...)
创建
use Helldar\Roles\Models\Role; use Helldar\Roles\Models\Permission; $role = Role::create(['slug' => 'admin']); $permission = Permission::create(['slug' => 'update']); $role->assignPermission($permission); // or $user = User::find(1); $role = $user->createRole('Mega Admin'); // creating Role instance with "mega_admin" slug and "Mega_Admin" title. $role = $user->createRole('Mega Admin', 'Mega Admin'); // creating Role instance with "mega_admin" slug and "Mega Admin" title. $role = $user->createRole('Mega Admin', 'Mega Admin', true); // creating Role instance with "mega_admin" slug and "Mega Admin" title and `is_root` role. $role->createPermission('Post edit'); // creating Permission instance with "post_edit" slug and "Post_Edit" title. $role->createPermission('Post edit', 'Post edit'); // creating Permission instance with "post_edit" slug and "Post edit" title.
分配、撤销和同步权限
此包允许用户与权限和角色关联。每个角色都与多个权限相关联。Role 和 Permission 是常规 Eloquent 模型。
分配权限
要添加角色和权限,请使用以下方法
use \Helldar\Roles\Models\Role; use \Helldar\Roles\Models\Permission; // For User $user->assignRole('role_slug'); $user->assignRole(Role::find(1)); $user->assignRole(1); $user->assignRoles($role_1, 'role_slug_2', 3, ...); // Adds to the user the role specified in the `default_role` // parameter of the `config/roles.php` file. // If `null`, then no addition will be made. $user->assignDefaultRole(); $user->assignPermission('permission_slug'); $user->assignPermission(Permission::find(1)); $user->assignPermission(1); $user->assignPermissions($permission_1, 'permission_2', 3, ...); // For Role use \Helldar\Roles\Models\Permission; $role->assignPermission('permission_slug'); $role->assignPermission(Permission::find(1)); $role->assignPermission(1); $role->assignPermissions($permission_1, 'permission_2', 3, ...); // For Permission use \Helldar\Roles\Models\Role; $permission->assignRole('role_slug'); $permission->assignRole(Role::find(1)); $permission->assignRole(1); $permission->assignRoles($role_1, 'role_2', 3, ...);
撤销权限
要撤销角色和权限,请使用以下方法
use \Helldar\Roles\Models\Role; use \Helldar\Roles\Models\Permission; // For User $user->revokeRole('role_slug'); $user->revokeRole(Role::find(1)); $user->revokeRole(1); $user->revokeRoles($role_1, 'role_slug_2', 3, ...); $user->revokePermission('permission_slug'); $user->revokePermission(Permission::find(1)); $user->revokePermission(1); $user->revokePermissions($permission_1, 'permission_2', 3, ...); // For Role use \Helldar\Roles\Models\Permission; $role->revokePermission('permission_slug'); $role->revokePermission(Permission::find(1)); $role->revokePermission(1); $role->revokePermissions($permission_1, 'permission_2', 3, ...); // For Permission use \Helldar\Roles\Models\Role; $permission->revokeRole('role_slug'); $permission->revokeRole(Role::find(1)); $permission->revokeRole(1); $permission->revokeRoles($role_1, 'role_2', 3, ...);
同步权限
要同步角色和权限,请使用以下方法
// For User $user->syncRoles([1, 2, 3, ...]); $user->syncPermissions([1, 2, 3, ...]); // For Role $role->syncPermissions([1, 2, 3, ...]); // For Permission $permission->syncRoles([1, 2, 3, ...]);
刀片
如果您已启用在配置文件中使用指令,您仍然可以使用带有附加的role()
和permission()
指令的can()
blade指令。
@can('permission_slug') I can see this text @endcan @if(auth()->user()->can('permission_slug')) I can see this text @endif @role('role_slug') I can see this text @endrole @role(auth()->user()->hasRole('role_slug')) I can see this text @endrole @roles('role_slug_1', 'role_slug_2', 'role_slug_3') I can see this text @endroles @roles(auth()->user()->hasRole('role_slug')) I can see this text @endroles @permission('permission_slug') I can see this text @endpermission @permission(auth()->user()->hasPermission('permission_slug')) I can see this text @endpermission @permissions('permission_slug_1', 'permission_slug_2', 'permission_slug_3') I can see this text @endpermissions @permissions(auth()->user()->hasPermission('permission_slug')) I can see this text @endpermissions
您只能使用具有角色/权限ID或缩略语的blade指令。
注意:使用@can()
、@role()
、@roles()
、@permission()
和@permissions()
指令是分别启用的。请参阅配置文件。
检查权限
一个root
角色
$user = User::find(1); // Checks if the user has at least one role with root access: $user->hasRootRole(): bool
用户
» 角色
$user = User::find(1); // with role slug: $user->hasRole('role_slug'): bool // with role ID: $user->hasRole(1): bool // with role instance: $user->hasRole(Role::find(1)): bool
用户
» 角色列表
$user = User::find(1); // with role slug: $user->hasRoles('role_slug_1', 'role_slug_2'): bool // with role slug as array: $user->hasRoles(['role_slug_1', 'role_slug_2']): bool // with role ID: $user->hasRoles(1, 2, 3): bool // with role instance: $user->hasRoles(Role::find(1), Role::find(2)): bool
用户
» 权限
$user = User::find(1); // with permission slug: $user->hasPermission('permission_slug'): bool // with permission ID: $user->hasPermission(1): bool // with permission instance: $user->hasPermission(Permission::find(1)): bool // If the `use_can_directive` option is set to true in the settings, // then you can also check permissions through the `can` directive: auth()->user()->can('permission_slug'): bool
用户
» 权限列表
$user = User::find(1); // with permission slug: $user->hasPermissions('permission_slug_1', 'permission_slug_1'): bool // with permission slug as array: $user->hasPermissions(['permission_slug_1', 'permission_slug_1']): bool // with permission ID: $user->hasPermissions(1, 2, 3): bool // with permission ID as array: $user->hasPermissions([1, 2, 3]): bool // with permission instance: $user->hasPermissions(Permission::find(1), Permission::find(2)): bool // with permission instance as array: $user->hasPermissions([Permission::find(1), Permission::find(2)]): bool
角色
» 权限
$role = Role::find(1); // with permission slug: $role->hasPermission('permission_slug'): bool // with permission ID: $role->hasPermission(1): bool // with permission instance: $role->hasPermission(Permission::find(1)): bool // If the `use_can_directive` option is set to true in the settings, // then you can also check permissions through the `can` directive: auth()->user()->can('permission_slug'): bool
角色
>> 权限列表
$role = Role::find(1); // with permission slug: $role->hasPermissions('permission_slug_1', 'permission_slug_1'): bool // with permission slug as array: $role->hasPermissions(['permission_slug_1', 'permission_slug_1']): bool // with permission ID: $role->hasPermissions(1, 2, 3): bool // with permission ID as array: $role->hasPermissions([1, 2, 3]): bool // with permission instance: $role->hasPermissions(Permission::find(1), Permission::find(2)): bool // with permission instance as array: $role->hasPermissions([Permission::find(1), Permission::find(2)]): bool
Artisan命令
您可以使用Artisan命令从控制台创建/删除角色或权限。
php artisan acl:role-create {slug}
php artisan acl:role-delete {id|ID or role slug}
php artisan acl:permission-create {slug}
php artisan acl:permission-delete {id|ID or permission slug}
您还可以从您的应用程序中调用角色的创建和权限。
Artisan::call('acl:role-create', ['slug' => $slug]); Artisan::call('acl:role-delete', ['slug' => $slug]); Artisan::call('acl:permission-create', ['slug' => $slug]); Artisan::call('acl:permission-delete', ['slug' => $slug]);
许可
本软件包在MIT许可下发布。