다음 튜토리얼 칼럼인 Laravel에서는 laravel-permission 역할 권한 제어에 대해 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!
https://github.com/spatie/laravel-permission
먼저 이야기를 나눠보겠습니다 데이터베이스의 테이블 구조에 대해서는 6개의 테이블이 있으며 원하는 대로 테이블을 추가, 수정, 삭제할 수 있지만 여전히 테이블이 먼저 나열됩니다!
첫 번째는 사용자 테이블(사용자)입니다. 말할 필요도 없이 여기에는 이름, 이메일 주소 등을 포함한 몇 가지 기본 정보가 포함되어 있습니다!
권한 테이블(권한)은 모든 권한을 저장하는 테이블입니다. 권한은 컨트롤러 액세스 권한, 인터페이스 액세스 권한, 모델 액세스 권한일 수 있습니다.
캐릭터 테이블(역할) 역할 테이블에는 모든 캐릭터가 저장되며, 캐릭터 이름이 인덱스입니다!
이제 기본 테이블이 생겼으니, 그것들은 어떻게 관련되어 있나요? 계속 읽어주세요!
사용자는 권한 테이블(model_has_permissions)을 가지고 있습니다. 이 테이블에는 user_id와permission_id의 다대다 관계 테이블이 기록되어 있습니다.
사용자는 역할 테이블(model_has_roles)을 가지고 있습니다. 이 테이블에는 user_id와 role_id가 포함되어 있으며, 이는 사용자와 역할을 기록하는 다대다 관계 테이블이기도 합니다. 중간 테이블로!
역할에 권한이 있음 테이블(role_has_permissions) 이 테이블에는 역할이 가지고 있는 권한이 기록됩니다. 역할 ID, 권한 ID라는 두 가지 필드만 있습니다. 필요에 따라 확장도 가능해요!
사용자는 직접적으로 model_has_permissions라는 권한을 가지며, 사용자는 역할을 갖고, 그 다음에는 model_has_role이고 역할 테이블 role_has_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); }
원래 작업을 호출하는 대신 이 메서드를 사용할 수도 있습니다. 예를 들어 프로젝트 초기화와 함께 제공되는 시더에서는 작업을 호출합니다
namespace App\Containers\Authorization\Data\Seeders; Apiato::call('Authorization@CreateRoleTask', ['admin', 'Administrator', 'Administrator Role', 999,'admin']);
네임스페이스 주소를 따라가면 시더를 검색할 수 있습니다. 이 작업은 필요에 따라 작업을 수정할 수도 있습니다.
$ permission = Permission :: create([ ' name ' => ' edit articles ' ]);
역할과 동일하게 작성된 Task와 생성 메소드도 찾을 수 있습니다! 여기서는 별로 할 말이 없습니다!
//可以授予任何用户权限: $ 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 ');
//在上面的例子中,角色被授予编辑文章的权限,并且该角色被分配给用户。现在,用户可以编辑文章并删除文章。
먼저 할 수 있는 일은 이 사용자에게 이 권한이 있습니까? 작업에서 이를 감지합니다.
사용자가 인터페이스를 요청하면 시스템은 사용자에게 이 인터페이스를 전달할 권한과 역할이 있는지 확인합니다!
물론 이 요청은 인터페이스가 메소드를 호출할 때 주입되어야 합니다!
위치는 아래와 같습니다
//“删除文章”的权限是直接分配给用户的直接权限。
Laravel에는 여러 역할 권한 제어 기능이 있지만 저는 이것을 선택했습니다. 누가 더 좋고 누가 더 나쁘기 때문이 아니라 laravel-permission을 검색하기 쉽습니다! 일반적으로 역할 권한은 역할 테이블과 권한 테이블로 구성되며, 그 다음에는 사용자, 역할, 권한 간의 관계 유지가 있습니다! 사실, 꼭 그 사람만의 방법을 사용할 필요는 없습니다!
기본 테이블 관계는 모두 다대다 관계입니다. 연결, 삭제 및 동기화를 사용하여 이들 간의 관계를 유지할 수 있습니다!
게임에 충분히 익숙해지면 그 사람의 관계표는 필요하지 않습니다. 이 10% 관계를 구현하려면 직접 작성하면 됩니다!
위 내용은 laravel-permission 역할 권한 제어 [상세 코드 설명]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!