Casbin

Casbin

  • Документ
  • API
  • Редактор
  • Плагины IDE
  • Single Sign-On (SSO)
  • Форум
  • Справка
  • Блог
  • Pricing
  • Contact Sales
  • Languages iconРусский
    • English
    • 中文
    • 한국어
    • Français
    • Deutsch
    • 日本語
    • Помочь перевести
  • GitHub

›Модель

Основы

  • Общий обзор
  • Начать работу
  • Как это работает
  • Уроки

Модель

  • Поддерживаемые модели
  • Синтаксис для моделей
  • Эффект
  • Функция
  • RBAC
  • RBAC with Pattern
  • RBAC с доменами
  • Casbin RBAC v.s. RBAC96
  • АДАТ
  • Приоритетная модель
  • Супер админ

Хранилище

  • Модель хранилища
  • Хранилище политики
  • Загрузка подмножества политик

Расширения

  • Enforcers
  • Адаптеры
  • Наблюдатели
  • Диспетчеры
  • Менеджеры ролей
  • Посредники
  • GraphQL Middlewares
  • Облачные Посредники

API

  • Обзор API
  • API управления
  • RBAC API
  • RBAC с доменным API
  • RoleManager API
  • Права доступа к данным

Расширенное использование

  • Многопоточность
  • Benchmarks
  • Оптимизация производительности
  • Авторизация Кубернетов
  • Авторизация служебной ячейки через посланника

Управление

  • Администратор портала
  • Служба Касбина
  • Обработка журнала и ошибок
  • Использование интерфейса

Редактор

  • Онлайн-редактор
  • Плагины IDE

Ещё

  • Наши усыновители
  • Вклад
  • Политика конфиденциальности
  • Условия предоставления услуг
Translate

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

  1. Касбин хранит только сопоставление ролей пользователя.
  2. Касбин не проверяет, является ли пользователь допустимым пользователем, или роль является правильной ролью. Это должно быть сделано путем аутентификации.
  3. Не используйте одно и то же имя пользователя и роль внутри системы RBAC, потому что Касбин распознает пользователей и роли как строки, и для Касбина не существует способа узнать, указали ли вы alice или роль alice. Вы можете просто решить это с помощью role_alice.
  4. Если 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 RBAC with Pattern

Роль менеджера

See Role Managers section for details.

← ФункцияRBAC with Pattern →
  • Определение роли
  • Иерархия ролей
  • Как отличить роль от пользователя?
  • Как запрашивать неявные роли или разрешения?
  • Использовать подходящий шаблон в RBAC
  • Роль менеджера
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?Stack Overflow
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @casbinHQ
Copyright © 2022 Casbin Organization