Метод авторизации, который разрешает или запрещает доступ к ресурсам на основе ролей, широко известен как управление доступом на основе ролей (RBAC). RBAC – это широко используемая модель авторизации в компьютерной безопасности, обеспечивающая гибкий и масштабируемый подход к управлению контролем доступа.
В RBAC роли определяются на основе обязанностей и задач, выполняемых пользователями внутри организации. Каждому пользователю назначается одна или несколько ролей, и каждая роль связана с определенными разрешениями или правами доступа. Затем доступ к ресурсам предоставляется или запрещается в зависимости от ролей, назначенных пользователю.
Вот несколько примеров реализации RBAC на разных языках программирования:
-
Python:
# Role definitions roles = { 'admin': ['create', 'read', 'update', 'delete'], 'editor': ['create', 'read', 'update'], 'viewer': ['read'] } # User-role mapping user_roles = { 'user1': ['admin'], 'user2': ['editor'], 'user3': ['viewer'] } # Check access def check_access(user, resource, action): if user in user_roles: roles = user_roles[user] for role in roles: if action in roles[role]: return True return False # Example usage user = 'user1' resource = 'document1' action = 'update' if check_access(user, resource, action): print("Access granted") else: print("Access denied") -
Java:
import java.util.HashMap; import java.util.Map; // Role definitions Map<String, String[]> roles = new HashMap<>(); roles.put("admin", new String[]{"create", "read", "update", "delete"}); roles.put("editor", new String[]{"create", "read", "update"}); roles.put("viewer", new String[]{"read"}); // User-role mapping Map<String, String[]> userRoles = new HashMap<>(); userRoles.put("user1", new String[]{"admin"}); userRoles.put("user2", new String[]{"editor"}); userRoles.put("user3", new String[]{"viewer"}); // Check access boolean checkAccess(String user, String resource, String action) { if (userRoles.containsKey(user)) { String[] roles = userRoles.get(user); for (String role : roles) { String[] permissions = roles.get(role); for (String permission : permissions) { if (permission.equals(action)) { return true; } } } } return false; } // Example usage String user = "user1"; String resource = "document1"; String action = "update"; if (checkAccess(user, resource, action)) { System.out.println("Access granted"); } else { System.out.println("Access denied"); }
Это лишь основные примеры, иллюстрирующие концепцию RBAC. На практике реализации RBAC могут быть более сложными и включать дополнительные функции, такие как иерархические роли, наследование ролей и динамическое назначение ролей.