RBAC
Определение роли
[role_definition]
- это определение отношений прав наследования роли RBAC. Casbin поддерживает несколько экземпляров систем RBAC, напр. пользователи могут иметь роли и их отношения с наследованием, а ресурсы могут также иметь роли и их отношения с наследованием. Эти две системы RBAC не будут мешать этому.
Этот раздел является необязательным. Если вы не используете роли RBAC в модели, то пропустите этот раздел.
[role_definition]
г = _, _
g2 = _, _
Вышеприведенное определение роли показывает, что г
является системой RBAC и g2
является другой системой RBAC. _, _
означает, что внутри отношений наследования есть две стороны. Как обычный случай, вы обычно используете g
самостоятельно, если вам нужны только роли для пользователей. Вы также можете использовать g
и g2
, когда вам нужны роли (или группы) как для пользователей, так и для ресурсов. Для примеров смотрите rbac_model.conf и rbac_model_with_resource_roles.conf.
Касбин хранит реальное сопоставление ролей пользователей (или сопоставление ролей ресурсов, если вы используете роли на ресурсах) в политике, например:
p, data2_admin, data2, читать
g, alice, data2_admin
Это означает alice
inherits/является членом роли data2_admin
. alice
может быть пользователем, ресурсом или ролью. Касбин признает его только в качестве строки.
Затем в матче, вы должны проверить роль, как показано ниже:
[matchers]
м = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
Это означает, что часть
в запросе должна иметь роль под
в политике.
::note
- Касбин хранит только сопоставление ролей пользователя.
- Касбин не проверяет, является ли пользователь допустимым пользователем, или роль является правильной ролью. Это должно быть сделано путем аутентификации.
- Не используйте одно и то же имя пользователя и роль внутри системы RBAC, потому что Касбин распознает пользователей и роли как строки, и для Касбина не существует способа узнать, указали ли вы
alice
или рольalice
. Вы можете просто решить это с помощьюrole_alice
. - Если
A
имеет рольB
,B
имеет рольC
, затемA
имеет рольC
. Сейчас эта транзитность бесконечна. :::
Иерархия ролей
RBAC в Касбине поддерживает иерархию ролей RBAC1, что означает, что alice
имеет роль1
, роль1
имеет роль2
, затем alice
также будет иметь роль2
и наследовать его права.
Вот понятие под названием уровень иерархии. Таким образом, уровень иерархии для этого примера - 2. Для встроенного ролевого менеджера в Касбине можно указать максимальный уровень иерархии. Значение по умолчанию: 10. Это означает, что конечный пользователь, как alice
, может наследовать только 10 уровней ролей.
// NewRoleManager — конструктор для создания экземпляра
// по умолчанию RoleManager.
func NewRoleManager(maxHierarchyLevel int) rbac.RoleManager {
rm := RoleManager{}
rm.allRoles = &sync. ap{}
maxHierarchyLevel = maxHierarchyLevel
rm. asPattern = false
return &rm
}
Как отличить роль от пользователя?
Касбин не отличает роль от пользователя в своей RBAC. Все они рассматриваются как строки. Если вы используете только одноуровневый RBAC (роль никогда не будет членом другой роли). Вы можете использовать e.GetAllSubjects()
для получения всех пользователей, и e.GetAllRoles()
для получения всех ролей. Они просто перечисляют все U
и все r
соответственно. g, u, r
правила.
Но если вы используете многоуровневый RBAC (с иерархией ролей), и ваше приложение не записывает имя (строка) является пользователем или ролью, или у вас есть пользователь и роль с таким же именем. Вы можете добавить префикс к роли, как роль::admin
перед передачей в Casbin. Таким образом, вы узнаете, является ли это ролью, проверяя этот префикс.
Как запрашивать неявные роли или разрешения?
Когда пользователь наследует роль или разрешение через иерархию RBAC вместо прямого назначения их в правиле политики, мы называем такой тип задания неявным
. Запрашивать неявные отношения, вам необходимо использовать эти 2 API: GetImplicitRolesForUser()
и GetImplicitPermissionsForUser()
вместо GetRolesForUser()
и GetPermissionsForUser()
. Для получения более подробной информации обратитесь к этой проблеме GitHub.
Использовать подходящий шаблон в RBAC
Роль менеджера
See Role Managers section for details.