Использование интерфейса
Casbin.js является аддоном Casbin, который позволяет управлять доступом в интерфейсе приложения.
Установка
npm install casbin.js
npm install casbin
или
yarn добавить casbin.js
Интерфейс
Среднее | Тип | Автор | Описание |
---|---|---|---|
react-authz | Реакция | Casbin | React оболочка для Casbin.js |
рбак-реакция | Реакция | @daobeng | Управление доступом на основе ролей в React с помощью HOC, CASL и Casbin.js |
vue-authz | Vue | Casbin | Оболочка Vue для Casbin.js |
углово-авторский | Угловой | Casbin | Угловая обертка для Casbin.js |
Быстрый старт
Вы можете использовать режим вручную
в интерфейсе приложения и устанавливать разрешение всякий раз, когда захотите.
const casbinjs = require("casbin". s");
// Установить права пользователя:
// Он может читать `data1` и `data2` объекты и может записать `data1` объект
const permission = {
"read": ["data1", "data2"],
"write": ["data1"]
}
// Запустить casbin. в ручном режиме, который требует установки разрешения вручную.
const authorizer = new casbinjs.Authorizer("manual");
теперь у нас есть авторизатор авторизатор
. Мы можем получить от него правила доступа, используя API authorizer.can()
и authorizer.cannot()
. Возвращаемыми значениями этих 2 API являются Promises JavaScript (подробнее здесь), поэтому мы должны использовать метод then()
возвращаемого значения:
result = authorizer.can("write", "data1");
result.then((success, failed) => {
if (success) {
console.log("you can write data1");
} else {
console.log("you cannot write data1");
}
});
// output: you can write data1
и cannot()
используется таким же образом:
result = authorizer.cannot("read", "data2");
result.then((success, failed) => {
if (success) {
console.log("you cannot read data2");
} else {
console.log("you can read data2");
}
});
// output: you can read data2
в коде выше, переменная успех
в параметрах означает, что запрос получает результат без ошибки и не означает, что правило прав доступа истинно
. не удалось
также не имеет отношения к правилам доступа. Это имеет смысл только когда что-то пойдет не так в процессе запроса.
Вы можете обратиться к нашему примеру React , чтобы увидеть практическое использование Casbin.js
Расширенное использование
Casbin.js предлагает идеальное решение для интеграции управления доступом интерфейса с вашим сервисом Casbin.
Используйте режим auto
и укажите вашу конечную точку при инициализации Casbin. s Authorizer
, он автоматически синхронизирует права и манипулирует статусом интерфейса.
const casbinjs = require('casbin.js');
// Устанавливаем URL-адрес вашего бэкэнда
const authorizer = new casbinjs. uthorizer(
'auto', // mode
{endpoint: 'http://your_endpoint/api/casbin'}
);
// Установка посетителя.
// Casbin.js автоматически синхронизирует разрешение с вашим сервисом Casbin.
authorizer.setUser("Том");
// Оценка результатов
= authorizer.can("read", "data1");
результат. ru(успех, failed) => {
if (success) {
// Некоторая процедура интерфейса ...
}
});
Соответственно, вам нужно раскрыть интерфейс (например, RestAPI) для создания объекта разрешения и передачи его фронтенду. В вашем контроллере API вызовите CasbinJsGetUserPermission
для создания объекта разрешения. Вот пример в Биго:
::note Ваш сервер должен вернуть что-то вроде
{
"other":"other",
"data": "Что вы получаете из `CasbinJsGetPermissionForUser`"
}
:::
// Маршрутизатор
beego.Router("api/casbin", &controllers.APIController{}, "GET:GetFrontendPermission")
// Контроллер
func (c *APIController) GetFrontendPermission() {
// Получить посетителя с GET параметров. (Ключ - "casbin_subject")
посетитель := c.Input(). et("casbin_subject")
// `e` является инициализированной копией Casbin Enforcer
c. ata["perm"] = casbin.CasbinJsGetPermissionForUser(e, visitor)
// Передача данных лицу.
c.ServeJSON()
}
::note на данный момент, CasbinJsGetPermissionForUser
api поддерживается только в Go Casbin и Node-Casbin. Если вы хотите, чтобы этот api поддерживался на других языках, поставьте проблему или оставьте комментарий ниже.
:::
Список API
setPermission(разрешение: строка)
Задать разрешение объекта. Always used in manual
mode.
setUser(пользователь: строка)
Задайте идентификатор посетителя и обновите разрешение. Всегда используется в режиме auto
.
can(действие: строка, объект: строка)
Отметьте, если пользователь может выполнить действие
на объекте
.
не может (действие: строка, объект: строка)
Check if the user cannot perform action
on object
.
canAll(действие: строка, объекты: массив<object>)
Check if the user can perform action
on all object in objects
.
canAny(действие: строка, объекты: массив<object>)
Check if the user can perform action
on any one of the objects
.
Почему Casbin.js
Люди могут удивляться разницей между Node-Casbin и Casbin.js. Одним словом, Node-Casbin является ядром Casbin, реализованного в среде NodeJS, и обычно используется в качестве инструмента управления доступом на сервере. Casbin.js это интерфейсная библиотека, которая поможет вам использовать Casbin для авторизации пользователя веб-страницы на клиентской стороне.
Обычно нецелесообразно непосредственно создавать службу Casbin и выполнять задачи по санкционированию/принудительной реализации на веб-интерфейсе из-за следующих проблем:
- Когда кто-то включит клиента, он будет инициализирован, и все политики будут взяты из стойких слоев бэкэнда. Высокое соотношение может привести к жесткому давлению на базы данных и стоимости большого количества пропускной способности сети.
- Загрузка всех политик на стороне клиента может привести к безопасным рискам.
- Трудно разделить между клиентом и сервером, а также agile-разработки.
Мы желаем инструмента, который облегчает процесс использования Casbin на фронтенде. На самом деле, ядром Casbin.js является манипуляция правами текущего пользователя на клиентской стороне. Как вы говорили, Casbin.js делает выборку из указанной конечной точки. Эта процедура будет синхронизировать разрешение пользователя с сервисом Casbin. После получения данных о разрешениях, разработчики могут использовать интерфейсы Casbin.js для управления поведением пользователя на стороне интерфейса.
Касбин. s избежать двух проблем, о которых говорилось выше: служба Касбин больше не будет повторяться повторно, и уменьшается размер передачи сообщений между клиентом и сервером. Мы также избегаем хранить все политики на фронтенде. Пользователь может получить доступ только по своему собственному разрешению, но не имеет никаких представлений о таких вещах, как модель контроля доступа и разрешения других пользователей. Кроме того, Casbin.js может эффективно разрезать клиента и сервера в управлении авторизацией.