metko / metkontrol

dev-master 2019-05-09 00:56 UTC

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)。有关更多信息,请参阅许可证文件