Casbin

Casbin

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

›API

Основы

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

Модель

  • Поддерживаемые модели
  • Синтаксис для моделей
  • Эффект
  • Функция
  • 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

Обзор API

Этот обзор показывает только как использовать Casbin API и не объясняет, как установлен Casbin и как он работает. You can find those tutorials here: installation of Casbin and how Casbin works. Итак, когда вы начинаете читать это руководство, мы предполагаем, что вы полностью установили и импортировали Casbin в ваш код.

Принудительный API

Начнем использовать API Касбина. Мы загрузим модель RBAC из model.conf, и загрузим политики из policy.csv. You can learn the Model syntax here, and we won't talk about it in this tutorial. Мы предполагаем, что вы можете понять указанные ниже конфигурационные файлы:

модель.conf

[request_definition]
r = sub, obj, действовать

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = где-то (стр. ft == allow))

[matchers]
m = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act

политика.csv

p, admin, data1, read
p, admin, data1, write
p, admin, data2, read
p, admin, data2, write
p, alice, data1, read
p, bob, data2, write
g, amber, admin
g, abc, admin

После прочтения конфигурационных файлов, пожалуйста, прочтите следующий код.

// загружаем информацию из файлов
enforcer, err := casbin.NewEnforcer("./example/model.conf", "./example/policy. sv")
if err != nil {
    log. atalf("ошибка, деталь: %s", ошибка)
}
ok, err := enforcer.Enforce("алицей", "данные1", "чтение")

Этот код загружает модель контроля доступа и политики из локальных файлов. Функция casbin.NewEnforcer() возвращает форвард. Он распознает 2 параметра как пути к файлам и загрузит файлы отсюда. Ошибки в процессе хранятся в err. Этот код использовал адаптер по умолчанию для загрузки модели и политики. И конечно же, можно получить тот же результат, используя сторонний адаптер.

Код ak, err := enforcer.Enforce("alice", "data1", "read") - это подтверждение прав доступа. Если alice может получить доступ к данным с помощью операции чтения, возвращаемое значение ок будет true, в противном случае он будет ложным. В этом примере значение ок равно истина.

EnforceEx API

Иногда вы можете задаться вопросом, какая политика разрешала запрос, поэтому мы подготовили функцию EnforceEx(). Вы можете использовать его следующим образом:

ok, причина, err := enforcer.EnforceEx("amber", "data1", "read")
fmt.Println(ok, reason) // true [admin data1 read]

функция EnforceEx() возвращает точную строку политики в значение Причина. В этом примере янтарь является ролью admin, так что политика p, admin, data1, прочитанная сделала этот запрос истинным. Выход из этого кода находится в комментарии.

Касбин подготовил много API, как это. Эти API добавили некоторые дополнительные функции на основном. К ним относятся:

  • ok, err := enforcer.EnforceWithMatcher(matcher, request)

    С игроком.

  • ok, причина, err := enforcer.EnforceExWithMatcher(matcher, request)

    Комбинация EnforceWithMatcher() и EnforceEx().

  • boolArray, err := enforcer.BatchEnforce(requests)

    Сделайте задачу списка, возвращает массив.

Это простое использование Касбина. Вы можете использовать Casbin для запуска сервера авторизации через эти API. В следующих параграфах мы покажем вам некоторые другие типы API.

API управления

Get API

Эти API используются для получения точных объектов в политиках. На этот раз мы загрузили силок, как последний пример и получить что-то из него.

Пожалуйста, прочтите следующий код:

enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
    fmt.Printf("Ошибка, подробности: %s\n", ошибка)
}
allSubjects := enforcer.GetAllSubjects()
fmt.Println(allSubjects)

Так же, как и в последнем примере, первые 4 строки загрузили некоторую необходимую информацию из локальных файлов. Мы больше не будем об этом говорить.

Код allSubjects := enforcer.GetAllSubjects() получил все темы в файле политики и возвратил их в виде массива. Затем мы распечатали этот массив.

Обычно вывод кода должен быть:

[alice bob]

Вы также можете изменить функцию GetAllSubjects() на GetAllNamedSubjects() , o получить список тем, которые отображаются в текущей именованной политике.

Точно так же мы подготовили GetAll функции для Объектов, Действий, Ролей. Единственное, что вам нужно сделать, это изменить слово Тема в названии функции на то, что вы хотите, если вы хотите получить доступ к этим функциям.

Кроме того, у нас есть больше получателей по политике. Метод вызова и значение возврата похожи на метод выше.

  • политика = e.GetPolicy() получает все правила авторизации в политике.
  • filteredPolicy := e.GetFilteredPolicy(0, "alice") получает все правила авторизации в политике, могут быть указаны фильтры полей.
  • namedPolicy := e.GetNamedPolicy("p") получает все правила авторизации в этой политике.
  • filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob") получает все правила авторизации в указанной политике, могут быть указаны фильтры полей.
  • groupingPolicy := e.GetGroupingPolicy() получает все правила наследования в политике.
  • filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice") получает все правила наследования ролей в политике, фильтры полей могут быть указаны.
  • namedGroupingPolicy := e.GetNamedGroupingPolicy("g") получает все правила наследования ролей в политике.
  • namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice") получает все правила наследования в политике.

Добавить, Удалить, Обновить API

Касбин подготовил много API для политики. Эти API позволяют динамически добавлять, удалять или редактировать политики во время работы.

Этот код показывает, как добавлять, удалять и обновлять свои политики, и рассказал вам, как подтвердить, что существует политика:

// загружаем информацию из файлов
enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
   fmt. rintf("Error, details: %s\n", err)
}

// добавьте политику, затем используйте HasPolicy() для подтверждения того, что
enforcer. ddPolicy("added_user", "data1", "read")
hasPolicy := enforcer.HasPolicy("added_user", "data1", "read")
fmt. rintln(hasPolicy) // true, we added that policy successfully

// remove the policy, then use HasPolicy() to confirm that
enforcer. emovePolicy("alice", "data1", "read")
hasPolicy = enforcer.HasPolicy("alice", "data1", "read")
fmt. rintln(hasPolicy) // false, мы удалили эту политику успешно

// обновляем политику, затем используйте HasPolicy() для подтверждения того, что
enforcer. pdatePolicy([]string{"added_user", "data1", "read"}, []string{"added_user", "data1", "write"})
hasPolicy = enforcer.HasPolicy("added_user", "data1", "read")
fmt. rintln(hasPolicy) // false, политика происхождения пропущена
hasPolicy = enforcer.HasPolicy("added_user", "data1", "write")
fmt.Println(hasPolicy) // true, the new policy is in use

Используя эти четыре типа API, вы можете редактировать ваши политики. Подобно этим, мы подготовили одинаковые типы API FilteredPolicy, NamedPolicy, FilteredNamedPolicy, GroupingPolicy, NamedGroupingPolicy, FilteredGroupingPolicy, FilteredNamedGroupingPolicy. Для их использования необходимо заменить слово Политику в названии функции на слова выше.

Кроме того, если вы измените параметры на массивы, вы можете пакетное редактирование политик.

Например, для таких функций:

enforcer.UpdatePolicy([]string{"eve", "data3", "read"}, []string{"eve", "data3", "write"})

если мы изменим Политику на Политикии отредактируем параметр:

enforcer.UpdatePolicies([][]string{{"eve", "data3", "read"}, {"jack", "data3", "read"}}, [][]string{{"eve", "data3", "write"}, {"jack", "data3", "write"}})

мы можем отредактировать эти политики.

Одинаковые операции также полезны GroupingPolicy, NamedGroupingPolicy.

RBAC API

Касбин предоставляет API для изменения модели и политики RBAC. Если вы знакомы с RBAC, вы можете легко использовать эти API.

Здесь мы покажем вам, как использовать RBAC API в Casbin и не будем говорить о самом RBAC. You can get more details here.

Мы используем этот код для загрузки модели и политики, как раньше.

enforcer,err := casbin.NewEnforcer("./example/model.conf", "./example/policy.csv")
if err != nil {
    fmt.Printf("Ошибка, подробности: %s\n", ошибка)
}

затем используйте экземпляр Enforcer для доступа к этим API.

roles, err := enforcer.GetRolesForUser("amber")
fmt.Println(roles) // [admin]
пользователей, err := enforcer.GetUsersForRole("admin")
fmt.Println(users) // [amber abc]

GetRolesForUser() возвращает массив, содержащий все роли, содержащие янтарь. В этом примере у янтарь имеет только одну роль администратора, поэтому массив ролей является [admin]. Кроме того, вы можете использовать GetUsersForRole() для присвоения роли пользователям. Возвращаемое значение этой функции также является массивом.

enforcer.HasRoleForUser("amber", "admin") // true

Вы можете использовать HasRoleForUser() для подтверждения принадлежности пользователя к этой роли. В этом примере янтарь является членом админа, поэтому возвратное значение функции истинно.

fmt.Println(enforcer.Enforce("bob", "data2", "write")) // true
enforcer.DeletePermission("data2", "write")
fmt.Println(enforcer.Enforce("bob", "data2", "write")) // false

Вы можете использовать DeletePermission() для удаления разрешения.

fmt.Println(enforcer.Enforce("alice", "data1", "read")) // true
enforcer.DeletePermissionForUser("alice", "data1", "read")
fmt.Println(enforcer.Enforce("alice", "data1", "read")) // false

И используйте DeletePermissionForUser() для удаления разрешения пользователя.

Касбин имеет много API, как это. Методы вызова и значения возврата имеют тот же стиль, что и приведенные выше API. You can find these APIs in next documents.

← Облачные ПосредникиAPI управления →
  • Принудительный API
  • EnforceEx API
  • API управления
    • Get API
    • Добавить, Удалить, Обновить API
  • RBAC API
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