Bei der Beantwortung Ihrer ersten Frage besteht das größte Problem bei der Überprüfung, ob ein Benutzer eine Rolle anstelle einer bestimmten Berechtigung hat, darin, dass Berechtigungen von mehreren Rollen gehalten werden können. Beispielsweise kann ein Entwickler Zugriff auf das Entwicklerportal im Unternehmensintranet haben, bei dem es sich wahrscheinlich auch um eine Berechtigung des Managers handelt. Wenn ein Benutzer dann versucht, auf das Entwicklerportal zuzugreifen, wird eine Überprüfung durchgeführt, die der folgenden ähnelt:
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
(Eine switch
Aussage in der Sprache Ihrer Wahl wäre besser, aber nicht besonders aufgeräumt)
Je häufiger oder weit verbreiteter eine Berechtigung ist, desto mehr Benutzerrollen müssten Sie prüfen, um sicherzustellen, dass jemand auf ein bestimmtes System zugreifen kann. Dies würde auch zu dem Problem führen, dass Sie jedes Mal, wenn Sie Berechtigungen für eine Rolle ändern, die Prüfung ändern müssen, um dies widerzuspiegeln. In einem großen System würde dies sehr schnell sehr unhandlich werden.
Wenn Sie einfach überprüfen, ob der Benutzer über die Berechtigung verfügt, die ihm beispielsweise den Zugriff auf das Entwicklerportal ermöglicht, spielt es keine Rolle, welche Rolle er innehat, sondern er erhält Zugriff.
Der Grund für die Beantwortung Ihrer zweiten Frage ist, dass Rollen so einfach zu ändern und "Pakete" von Berechtigungen zu verteilen sind. Wenn Sie über ein System mit Hunderten von Rollen und Tausenden von Berechtigungen verfügen, müssen Sie zum Hinzufügen eines neuen Benutzers (z. B. eines neuen Personalleiters) alle Berechtigungen anderer Personalleiter erteilen. Dies wäre nicht nur mühsam, sondern auch fehleranfällig, wenn es manuell durchgeführt wird. Vergleichen Sie dies, indem Sie einem Benutzerprofil einfach die Rolle "HR-Manager" hinzufügen, wodurch ihm derselbe Zugriff gewährt wird wie jedem anderen Benutzer mit dieser Rolle.
Sie könnten argumentieren, dass Sie einfach einen vorhandenen Benutzer klonen könnten (wenn Ihr System dies unterstützt), aber während dies dem Benutzer die richtigen Berechtigungen für diesen Moment gewährt, könnte der Versuch, eine Berechtigung für alle Benutzer in der Zukunft hinzuzufügen oder zu entfernen, erfolgreich sein schwierig. Ein Beispielszenario hierfür wäre, wenn in der Vergangenheit möglicherweise auch die Personalabteilung für die Personalabrechnung zuständig war, das Unternehmen aber später groß genug wird, um Mitarbeiter speziell für die Personalabrechnung einzustellen. Das bedeutet, dass die Personalabteilung nicht mehr auf das Abrechnungssystem zugreifen muss, sodass die Berechtigung entfernt werden kann. Wenn Sie 10 verschiedene HR-Mitglieder haben, müssen Sie manuell durchgehen und sicherstellen, dass Sie die richtige Berechtigung entfernen, die die Möglichkeit von Benutzerfehlern einführt. Das andere Problem dabei ist, dass es einfach nicht skaliert; Wenn Sie mehr Benutzer für eine bestimmte Rolle gewinnen, wird das Ändern einer Rolle sehr viel schwieriger. Vergleichen Sie dies mit der Verwendung von Rollen, bei denen Sie nur die betreffende übergeordnete Rolle ändern müssen, um die Berechtigung zu entfernen. Dies würde sich für jeden Benutzer widerspiegeln, der diese Rolle innehat.