metko / metkontrol
包权限
dev-master
2019-05-09 00:56 UTC
Requires
- php: >=7.0
- illuminate/auth: ~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0
- illuminate/container: ~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0
- illuminate/contracts: ~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0
- illuminate/database: ~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0
Requires (Dev)
- orchestra/testbench: ~3.4.2|~3.5.0|~3.6.0|~3.7.0
- phpunit/phpunit: ^5.7|6.2|^7.0
- predis/predis: ^1.1
This package is auto-updated.
Last update: 2024-09-09 13:49:58 UTC
README
这是一个简单的个人包,用于处理Laravel应用内部的角色和权限。与Laravel 5.8兼容。
安装
通过composer
composer require metko/metkontrol
部署配置和迁移文件
php artisan vendor:publish --provider="Metko\Metkontrol\MetkontrolServiceProvider"
最后执行迁移
php artisan migrate
可选地,您可以在配置文件中指定您希望拥有的第一个角色和权限。默认情况下,它将使用以下内容
'roles' => ['Member', 'Author', 'Moderator', 'Admin', 'Super Admin'], 'permissions' => ['A permission', 'Second permission', 'third permission'],
引用块
复制种子类文件
php artisan vendor:publish --provider="Metko\Metkontrol\MetkontrolServiceProvider" --tag="seeds"
运行composer自动加载
composer dump-autoload
然后进行种子!
php artisan db:seed --class=MetkontrolTableSeeder
用法
只需将特性和模型添加到您想要拥有角色和权限的模型中。(注意,如果您只想使用角色,而不能反过来)。
use Metko\Metkontrol\MetkontrolRole, Metko\Metkontrol\MetkontrolPermission, Metko\Metkontrol\MetkontrolCache; // To update the cache when a model instance is created or updated
角色
将角色附加到模型
$role = Role::find(1); $model->attachRole($role); // Role class // or $model->attachRole(1); // Role ID $model->attachRole('Author') // Role Name or slug // You can also pass an array $model->attachRole([$role, 1, 'author']); // Or a piped string $model->attachRole("role-name|2|moderator|Super admin");
删除角色
$role = Role::find(1); $model->removeRole($role); // or $model->removeRole(1); $model->removeRole('role name') // Name or slug // or $model->removeRole([$role, 1, 'role name']); $model->removeRole("1|Moderator"); // or $model->removeRole(); // Will remove all the role
检查模型是否有特定角色
$role = Role::find(1); $model->attachRole($role); $model->hasRole($role); // True // or $model->hasRole(1); // True $model->hasRole("Author"); // True $model->hasRole("author"); // True $model->hasRole('wrong role name') // False
检查模型是否具有角色之一
$model->hasAnyRole('test|3|a-slugged-role');
检查模型是否具有所有给定角色
$model->hasAllRoles([$role, 3, "A new role"]);
权限
给模型赋予权限
$permission = Permission::find(1); $model->givePermissionTo($permission);
与角色类似,您可以传递ID、名称、slug、混合元素数组(字符串、模型、int)或管道字符串
删除权限
$model->removePermissionTo('permission name') // Name or slug // or $model->removePermissionTo('permission1 name|permission2 slug'); $model->removePermissionTo([$permission1, $permission2]); $model->removePermissionTo(); // Will remove all the permission
检查是否有特定权限
$model->hasAnyPermission($permission1) // Return bool
或
$model->hasPermissionTo($permission1) // Return bool
如果具有其中一项权限
$model->hasAnyPermission("permission1|another-one|4") // Return bool
如果具有所有权限
$model->hasAllPermissions([$permission1, "second-permission"]) // Return bool
您还可以直接从权限模型或角色模型检查模型是否具有特定权限
$model->hasDirectPermission($permission1) // Return bool $model->hasDirectPermissionViaRole($permission1) // Return bool
中间件
您可以使用中间件检查用户是否具有给定的角色
Route::get('/', 'homeController@index')->middleware('hasRole:author'); Route::get('/', 'homeController@index')->middleware('hasRole:author|writer');
或权限
Route::get('/', 'homeController@index')->middleware('hasPermission:delete-account'); Route::get('/', 'homeController@index')->middleware('hasPermission:create-news|edit-blog');
Blades
您可以使用blade模板检查用户是否具有角色
@role('author') // Only author can see it @elserole('member') // Only member can see it @endrole
您可以使用blade模板检查用户是否具有角色之一
@hasanyrole('author|3') // you can also pass a array // Only author and role with ID to 3 can see it @endhasanyrole
您可以使用blade模板检查用户是否具有所有角色
@hasallrole('author|3') // you can also pass a array // Only author and role with ID to 3 can see it @endhasallrole
您可以使用blade模板检查用户是否具有所有角色
@unlessrole(1) // you can also pass a array // People without the role 1 can see this line @endunlessrole
或权限
Route::get('/', 'homeController@index')->middleware('hasPermission:delete-account'); Route::get('/', 'homeController@index')->middleware('hasPermission:create-news|edit-blog');
或两者
Route::get('/', 'homeController@index')->middleware('hasRoleOrPermission:delete-account'); Route::get('/', 'homeController@index')->middleware('hasRoleOrPermission:create-news|Author');
测试
composer test
更新日志
请参阅更新日志以获取更多信息。
贡献
请参阅贡献以获取详细信息。
安全
如果您发现任何安全相关问题,请通过电子邮件metko@gmail.com联系,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。