RBAC를 구현하려고하는데 사용자가 개의 복수 역할을 가질 수 있으며 각각은 특정 컨텍스트 아래에 있습니다.컨텍스트가있는 역할 기반 액세스 제어 (RBAC)?
이 컨텍스트는 3 가지 요인, Company
, Product
및 Region
을 기반으로합니다.
는 지역 RBAC 이런 종류의 가장 좋은 방법이 설정되어 무엇 4
> 그래서 사용자 A가 회사 1의 Admin
될 수 있으며, 또한 회사 2> 제품 3의 Viewer
수?
필자는이 순간을 손으로 돌리고 있습니다. 따라서이 수준의 세분화 된 액세스를 허용 할 수있는 DB 테이블을 구성하는 가장 좋은 방법을 모색하고 있습니다.
불행히도 이것은 PHP CodeIgniter/mySQL을 실행하는 레거시 응용 프로그램에 있습니다. 따라서 모든 기존의 기존 lib는 호환되지 않을 수 있습니다.
UPDATE
지금까지이있다. Permissions
테이블 매핑 Roles
, Roles
다음 사용자 및 주어진 컨텍스트에 할당됩니다.
account_id | role_id | company_id | product_id | region_id |
------------------------------------------------------------
1 | 1 | | | |
2 | 2 | 1 | | |
2 | 3 | 2 | 1 | |
3 | 4 | 3 | 1 | 2 |
3 | 4 | 3 | 1 | 3 |
3 | 4 | 3 | 1 | 4 |
이의 SQL은 ... 조금 다음과 같습니다
SELECT DISTINCT account_id
FROM user_roles ur, role_permissions rp
JOIN permissions p ON rp.permission_id=p.id
WHERE (
#correct user that has a role with the permission we want
ur.account_id = 1
AND rp.permission_id IN (1,2,3)
AND ur.role_id = rp.role_id
#if the user is sys admin they can see everything
AND (
ur.role_id = 1
#if the user is company admin
OR ( ur.role_id = 2 AND [email protected])
#if the user is product admin
OR (ur.role_id = 3 AND [email protected] AND [email protected])
#if the user is any other role then the need explicit access
OR (ur.role_id > 3 AND [email protected] AND [email protected] AND [email protected])
)
);
이 작동하지만, 난이 할 수있는 더 좋은 방법이있을거야.
다음 문제는 역할에 계층 구조를 적용하는 방법입니다.
그래서 회사> 제품> 지역의 '관리자'는 자신의 역할 또는 그 이하의 사용자 만 만들 수 있습니까?
우리가 속한 컨텍스트에서 지정한 역할을 찾아 본 다음 사용자보다 낮은 순위의 모든 역할을 반환해야합니까?
이 컨텍스트를 문자열로 배치하는 것이 더 좋을까요? '1.3.gb'/ '1.2'? 그런 다음 역할을 찾을 때 먼저 컨텍스트 문자열을 구성합니다.
카일 (Kyle)은 제가 지금까지 생각해 낸 것과 비슷합니다. 제가 지금 고민하고있는 한가지는 이러한 맥락에서 역할 계층 구조를 갖는 방법입니다. 약간의 추가 정보로 내 질문을 업데이트하십시오. –
카일 헤이, 질문에 대한 더 많은 정보를 추가했는데, 어떤 조언이나 조언도 많이 부탁드립니다. –
죄송합니다 @MattBryson 저는 SQL에 너무 좋지 않습니다 - 나는 누군가에게 당신에게 더 나은 도움을 줄 수 있도록 질문에 투표 할 것입니다. 그러나 설정에 너무 의존한다고 생각하면 간단한 PHP 코드로 대부분의 것을 얻을 수 있습니다. – KDOT