첫 번째 질문에 대한 응답으로 사용자에게 특정 권한이 아닌 역할이 있는지 확인하는 데 가장 큰 문제는 여러 역할이 권한을 보유 할 수 있다는 것입니다. 이에 대한 예로, 개발자는 회사 인트라넷에서 개발자 포털을 볼 수있는 액세스 권한을 가질 수 있습니다. 이는 아마도 관리자가 보유한 권한 일 수도 있습니다. 사용자가 개발자 포털에 액세스하려고하면 다음과 유사한 검사가 나타납니다.
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
( switch
귀하가 선택한 언어로 된 진술이 더 좋지만 여전히 깔끔하지는 않습니다)
더 일반적이거나 널리 사용되는 권한 일수록 누군가 특정 시스템에 액세스 할 수 있는지 확인하기 위해 더 많은 사용자 역할을 확인해야합니다. 또한 역할에 대한 권한을 수정할 때마다이를 반영하도록 검사를 수정해야하는 문제가 발생합니다. 큰 시스템에서 이것은 매우 다루기 힘들어 질 것입니다.
예를 들어, 사용자에게 개발자 포털에 액세스 할 수있는 권한이 있는지 확인하면 어떤 역할을 수행하든 관계없이 액세스 권한이 부여됩니다.
두 번째 질문에 대답하려면 역할이있는 이유는 권한의 "패키지"를 쉽게 수정하고 배포하는 역할을하기 때문입니다. 수백 개의 역할과 수천 개의 권한을 가진 시스템이있는 경우 새 사용자 (예 : 새 HR 관리자)를 추가하려면 다른 HR 관리자가 보유한 모든 단일 권한을 부여해야합니다. 이 작업은 지루할뿐만 아니라 수동으로 수행하면 실수하기 쉽습니다. 이것을 단순히 "HR 관리자"역할을 사용자 프로필에 추가하는 것과 비교하면 해당 역할을 가진 다른 모든 사용자와 동일한 액세스 권한이 부여됩니다.
기존 사용자를 복제 할 수 있다고 주장 할 수 있지만 (시스템에서이를 지원하는 경우) 해당 시점에 대해 사용자에게 올바른 권한을 부여하지만 향후 모든 사용자에 대한 권한을 추가하거나 제거하려고 시도하는 것은 어려운. 이에 대한 시나리오의 예는 과거 HR 직원이 급여를 담당했지만 나중에 회사가 급여를 처리하기 위해 직원을 채용 할만큼 충분히 커지는 경우입니다. 즉, HR은 더 이상 급여 시스템에 액세스 할 필요가 없으므로 권한을 제거 할 수 있습니다. HR 구성원이 10 명인 경우 수동으로 진행하여 사용자 오류가 발생할 수있는 올바른 권한을 제거해야합니다. 이것의 다른 문제는 단순히 확장되지 않는다는 것입니다. 주어진 역할에서 점점 더 많은 사용자를 확보할수록 역할 수정이 훨씬 어려워집니다. 권한을 제거하기 위해 문제의 중요한 역할 만 수정하면되는 역할을 사용하는 역할과 비교하십시오. 권한을 제거하면 해당 역할을 보유한 모든 사용자가이를 반영합니다.