Spatie의 Laravel 권한 패키지는 기본적으로 역할 계층 또는 상속을 지원하지 않습니다. 이는 부모 역할이 자녀 역할의 모든 권한을 자동으로 상속하는 역할 간의 부모-자녀 관계를 정의하기위한 내장 기능이 없음을 의미합니다.
Spatie가 역할과 권한을 처리하는 방법
- 역할 및 권한은 데이터베이스에서 별도의 엔티티로 저장됩니다.
- 권한은 역할에 직접 할당됩니다.
- 사용자는 역할을 할당하고 해당 역할을 통해 관련 권한을 얻습니다.
- 사용자에게 직접 권한을 할당 할 수도 있습니다.
- 권한을 확인할 때 패키지는 사용자에게 직접 할당 된 모든 권한과 역할을 통해 상속 된 모든 권한을 살펴 봅니다.
역할 계층 및 상속
- 패키지는 역할을 계층 구조없이 평평한 엔티티로 취급합니다.
- 하나의 역할을 다른 역할에 할당하거나 "아동 역할"의 모든 권한을 자동으로 상속하는 "부모 역할"을 갖는 내장 메커니즘은 없습니다 [1] [4].
- 사용자는 여러 역할을 할당 할 수 있으므로 계층 적 상속에 의존하기보다는 다른 역할의 권한을 결합 할 수 있습니다 [2].
Spatie와의 역할 계층 구현을위한 일반적인 접근 방식
Spatie는 역할 상속을 지원하지 않기 때문에 개발자는 종종 다음과 같은 해결 방법을 구현합니다.
-모든 권한을 더 높은 수준의 역할에 명시 적으로 할당 : 아동 역할로부터의 권한을 상속하는 대신, 모든 관련 권한을 각 역할에 수동으로 할당합니다.
- 정수 값으로 역할 순위 : 일부 개발자는 순위 또는 레벨을 역할에 할당하고 (예 : 사용자의 경우 1, 중재자의 경우 2, 관리자의 경우 3)를 구현하여 사용자의 역할 순위를 기반으로 권한을 부여하여 계층 구조를 효과적으로 시뮬레이션합니다 [2].
- 사용자 당 여러 역할 : 계층 적 역할의 필요성을 피하고 다른 역할에서 결합 된 권한이 필요한 사용자에게 여러 역할을 할당합니다 [2].
요약
-Spatie의 패키지는 역할과 권한을 별도의 평평한 엔티티로 관리하는 데 중점을 둡니다.
-역할 대 역할 상속없이 역할 및 사용자에게 직접 권한을 할당하는 것이 좋습니다.
- 필요한 경우 역할 계층 및 상속은 일반적으로 권한을 명시 적으로 할당하거나 사용자 정의 순위 논리를 사용하여 수동으로 구현해야합니다.
-이 설계는 부모 역할의 권한이 아동 역할에 의존하는 잠재적 인 문제를 피하여 보안 또는 관리 복잡성을 유발할 수 있습니다 [1] [2] [4].
따라서 Spatie는 강력하고 유연한 권한 시스템을 제공하지만 내부적으로 역할 계층과 상속을 처리하지는 않습니다. 개발자는 필요한 경우 그러한 행동을 시뮬레이션하기 위해 자체 전략을 설계해야합니다.
인용 :
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/struggling_to_create_hierarchy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-to-implement-hierarchical-rbac--laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role-cccess-ccess-control-laravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[7] https://www.youtube.com/watch?v=3HSBJCVWH78
[8] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-a-user-with-child-roles-aving-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-used-users-with-roles-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies-and-gates-role-ccess-1bdn