https://github.com/spatie/laravel-permission
$role = Role::Create(['name' => 'add_title']);
Create有几个参数呢?原方法中有一个name和guard_name,如下面代码
use Spatie\Permission\Models\Role;
public static function create(array $attributes = []) { $attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard'); if (static::where('name', $attributes['name'])->where('guard_name', $attributes['guard_name'])->first()) { throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']); } if (isNotLumen() && app()::VERSION < '5.4') { return parent::create($attributes); } return static::query()->create($attributes); }
我们也可以不用这个方法,去调用它原有的task也可以,比如项目初始化自带的seeder中就调用task
namespace App\Containers\Authorization\Data\Seeders;
Apiato::call('Authorization@CreateRoleTask', ['admin', 'Administrator', 'Administrator Role', 999,'admin']);
跟着命名空间地址去找就能找到seeder、这个task也在Authorization下面Task里面、可以自己修改Task来符合自己的需求!
$ permission = Permission :: create([ ' name ' => ' edit articles ' ]);
跟role一样也可以找到一个写好的Task以及它的create方法!在这里就不过多说了!
//可以授予任何用户权限:
$ user - > givePermissionTo(' edit articles ');
//你也可以一次给多个权限
$ user - > givePermissionTo( ' edit articles ', ' delete articles ');
//你也可以传递数组
$ user - > givePermissionTo([ ' edit articles ', ' delete articles ' ]);
//权限可以从用户撤销:
$ user - > revokePermissionTo(' edit articles ');
//或者一次性撤消并添加新的权限:
$ user - > syncPermissions([ ' edit articles ',' delete articles ' ]);
//您可以测试用户是否有权限:
$ user - > hasPermissionTo(' edit articles ');
//测试用户有多个权限:
$ user - > hasAnyPermission([ ' edit articles ',' publish articles ',' unpublish articles ' ]);
//您可以使用Laravel的默认can功能测试用户是否具有权限:
$ user - > can(' edit articles ');
//角色可以分配给任何用户:
$ user - > assignRole(' writer ');
//你也可以一次赋值多个角色
$ user - > assignRole( ' writer ', ' admin ');
//或者作为一个数组
$ user - > assignRole([ ' writer ', ' admin ' ]);
//角色可以从用户中删除:
$ user - > removeRole(' writer ');
//角色也可以同步:
//所有当前角色将被从用户中删除,而由传入的数组取代
$ user - > syncRoles([ ' writer ', ' admin ' ]);
//您可以确定用户是否具有某个角色:
$ user - > hasRole(' writer ');
//您还可以确定用户是否有任何给定的角色列表:
$ user - > hasAnyRole(Role :: all());
//您还可以确定用户是否具有所有给定的角色列表:
$ user - > hasAllRoles(Role :: all());
//assignRole,hasRole,hasAnyRole,hasAllRoles 和removeRole函数可以接受一个字符串,
//一个\Spatie\Permission\Models\Role对象或一个\Illuminate\Support\Collection对象。
//可以给角色一个许可:
$ role - > givePermissionTo(' edit articles ');
//您可以确定角色是否具有某种权限:
$ role - > hasPermissionTo(' edit articles ');
//权限可以从角色中被撤销:
$ role - > revokePermissionTo(' edit articles ');
//该givePermissionTo和revokePermissionTo函数可以接受字符串或Spatie\Permission\Models\Permission对象。
//权限是从角色自动继承的。另外,个人权限也可以分配给用户。例如:
$ role = Role :: findByName(' writer ');
$ role - > givePermissionTo(' edit articles ');
$ user - > assignRole(' writer ');
$ user - > givePermissionTo(' delete articles ');
//在上面的例子中,角色被授予编辑文章的权限,并且该角色被分配给用户。现在,用户可以编辑文章并删除文章。
//“删除文章”的权限是直接分配给用户的直接权限。
//当我们调用$user->hasDirectPermission('delete articles')它返回true,
//但false对$user->hasDirectPermission('edit articles')。
//如果为应用程序中的角色和用户设置权限并希望限制或更改用户角色的继承权限(即,仅允许更改用户的直接权限),则此方法非常有用。
//您可以列出所有这些权限:
//直接权限
$ user - > getDirectPermissions() //或$ user-> permissions;
//从用户角色继承的权限
$ user - > getPermissionsViaRoles();
//所有适用于用户的权限(继承和直接)
$ user - > getAllPermissions();
//所有这些响应都是Spatie\Permission\Models\Permission对象的集合。
//如果我们按照前面的例子,第一个响应将是一个具有delete article权限的集合,
//第二个响应将是一个具有权限的集合,edit article第三个将包含这两个集合。
首先你可以在action中检测这个用户有没有这项权限!
你还可以在request中使用,当用户请求一个接口时、系统会去判断用户是否拥有通过这个接口的权限和角色!
这个request当然要在接口调用方法的时候注入进去!
下面给出位置
namespace App\Containers\Authorization\UI\API\Requests;
/** * Define which Roles and/or Permissions has access to this request. * * @var array */ protected $access = [ 'permissions' => 'add-permission-byRole', 'roles' => '', ];
laravel有几个角色权限控制,但是我选择这个,laravel-permission好搜索、不是因为谁好谁差的!总的来说角色权限就角色表和权限表,然后就是用户、角色、权限的关系维护!其实也可以不用他自带的方法!
基本表的关系都是多对多可以使用attach和detch、sync来维护他们之间的关系!
如果自己玩得够熟悉了,也不需要他的关系表,完全可以自己写好来实现这一成的关系!