Java Script-AdonisJs Функции(роли) ACL-RBAC Backend API

Необходимые навыки: NodeJs, AdonisJs Yarn/Npm, DataBase, Mysql или PostgreeSql, JavaScript.

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

Система уровней доступа и полный ролевой доступ, использующая Java Script вместе с AdonisJS Framework для наглядного примера.

Использование реляционной базы данных SQL, клиента Postgree, Mysql.
Важно знать, что реляционная база данных SQL DB является фундаментальным инструментом для этого процесса, это создаст легкость в нашей разработке, когда мы начнем понимать отношения между таблицами базы данных и правила функций, которые скажут, кто может делать что, внутри системы.

Это одна из областей программирования, весьма примечательная и обычная в больших системах.

Начало работы: Создайте базу данных с помощью клиента Mysql или Postgre. С именем, паролем и хостом (я не буду вдаваться в суть того, как это сделать, необходимо обладать этими знаниями).

Теперь, когда Adonisjs установлен на нашей машине, мы должны создать проект.

Doc Adonisjs: https://adonisjs.com/docs/4.1/installation

Создаем наш проект в режиме API:

adonis new acl-rbac-adonis-api --api-only

Я нашел две библиотеки, связанные с Adonis, которые играют роль RBAC/ACL:

1- https://www.npmjs.com/package/@rocketseat/adonis-acl
https://github.com/HigoRibeiro/adonis-acl

2- https://www.npmjs.com/package/accesscontrol
https://github.com/onury/accesscontrol

Но в заключение я использую эту библиотеку в качестве примера:

https://github.com/QuantumLabsLtda/adonisjs-cerberus

Вы можете создать среднее ПО на ногте и установить свои правила для уровней доступа и ролей.
Это даст вам больше свободы для реализации системы RBAC ACL, более структурированной и дающей вам
вы получаете больше свободы и потребляете меньше ресурсов.

Потому что когда вы создаете midlleware, вам не нужно тратить время и машинную обработку, чтобы перейти
обратиться к базе данных, чтобы проверить, имеет ли этот пользователь доступ к данному URL.
В целом это обойдется вам дешевле по времени и обработке.
безопасности, это будет зависеть от проекта и самих переменных.

Создав этот промежуточный модуль, вы можете легко разделить, кто может получить доступ к какому URL, и в целом вам не нужно использовать новую библиотеку только для этой цели.

В конечном итоге может оказаться гораздо выгоднее создать уникальную систему midlleware и создать собственные правила доступа.
Это должно быть решено вами и во многом зависит от типа вашего проекта.

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

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

Сначала добавьте пакет библиотек Adonis-Cerberus

npm i @quantumlabs/adonisjs-cerberus --save

Выполните настройки провайдера в корне проекта.

На сайте

start/app.js


const providers = [
    ...
    '@quantumlabs/adonisjs-cerberus/providers/CerberusProvider',
    ...
  ]

Войдите в полноэкранный режим Выход из полноэкранного режима

На сайте

start/app.js


const aceProviders = [
    ...
    '@quantumlabs/adonisjs-cerberus/providers/CommandsProvider'
    ...
  ]

Войдите в полноэкранный режим Выход из полноэкранного режима

На сайте

start/kernel.js


const namedMiddleware = [
    ...
    guard: 'Cerberus/Middleware/Guard'
    ...
  ]

Войдите в полноэкранный режим Выход из полноэкранного режима

Добавьте специальные функции trails, внутри Model User.js

На сайте

app/Models/User.js.


class User extends Model {
  static boot () {
    super.boot()

    this.addTrait('@provider:Cerberus/Traits/Role')
    this.addTrait('@provider:Cerberus/Traits/Permission')
  }
...

Войдите в полноэкранный режим Выход из полноэкранного режима

Наконец, выполните команду cerberus, которая создаст все миграции с отношениями ключей PK и FK и всей структурой на основе ACL и RBAC.
Выполните команду:

adonis cerberus:init

Войдите в папку database/migrations и вы увидите созданные новые таблицы.

Затем выполните команду для переноса таблиц в базу данных.

adonis migration:run

Если все прошло успешно, вы увидите таблицы, созданные в клиенте вашей базы данных.

Как уже упоминалось, эта команда должна (и, надеюсь, скопирует) все специфичные для библиотеки миграции в папку migrations ваших проектов. Для этой команды нет специальных флагов или параметров.

Роль / функция

adonis cerberus:role [name] [slug]

Usage:
  cerberus:role <name> [slug] [options]

Arguments:
  name   Name of the role
  slug   Short name for role
Войдите в полноэкранный режим Выход из полноэкранного режима

Затем выполните команду для создания роли/функции.


adonis cerberus:role admin adm

Войдите в полноэкранный режим Выход из полноэкранного режима

В таблице ролей для пользователя создается новый тип роли.

Эта команда создает новую * роль / функцию * в таблице roles/role. Вам нужно указать только роль name, аргумент slug необязателен.
Эта команда создает новую роль в таблице ролей. Вам нужно указать только имя роли, аргумент slug необязателен.

Этот процесс создания уровней доступа по ролям продолжается в других основных таблицах,roles,resources,permissions,default_permissions.

Ресурс

adonis cerberus:resource [name] [slug] [options]

Arguments:
  name               Name of the resource
  slug               Short name for resource

Options:
  -p, --defaultPermission   Generate default permissions
  -a, --always-ask   Ask which rights give in each Resource once (false by default)
  --from-models      Generate a resource for each app Model
  --from-controllers Generate a resource for each app Controller
Войдите в полноэкранный режим Выход из полноэкранного режима

Затем выполните команду для создания ресурса.


adonis cerberus:resource admin adm

Войдите в полноэкранный режим Выход из полноэкранного режима

В таблице ресурсов для пользователя создается новый тип роли.

Эта команда создает новый *ресурс/ресурс* в таблице ресурсов. Вам нужно указать только name ресурса, аргумент slug необязателен.
Варианты:
-p, --defaultPermission — генерировать разрешения по умолчанию.
-a, --always-ask — Спрашивать, какие права дать в каждом ресурсе, один раз (по умолчанию false).
--from-models — Генерировать ресурс для каждой модели приложения
--from-controllers — Генерировать ресурс для каждого контроллера приложения

Разрешение по умолчанию

cerberus:defaultPermission [options]

Options:
  -a, --all               Run default permission creation for each Resource in database
  --resource-name <value> Name of resource
Войдите в полноэкранный режим Выход из полноэкранного режима

Затем выполните команду для создания default_permissions/standard permissions.


adonis cerberus:defaultPermission --all

Войдите в полноэкранный режим Выход из полноэкранного режима

Эта команда создает новое * разрешение по умолчанию * в таблице default_permissions. Вам нужно указать имя ресурса, а затем * Cerberus * создает запись разрешения по умолчанию с указанным * именем ресурса.

Используйте

Использование маршрутизации

После создания разрешений вы можете начать использовать промежуточное ПО Guard в своих маршрутах.

Привязать разрешение к маршруту очень просто, см:

/**
* Get all users
* GET users
*/
Route
  .get('', 'UserController.index')
  .middleware(['auth', 'guard: user.read'])
Войдите в полноэкранный режим Выход из полноэкранного режима

Вы также можете использовать несколько разрешений на маршруте:

/**
* Create a new user
* POST users/register
*/
Route
  .post('register', 'UserController.register')
  .middleware(['auth', 'guard: user.create, user.read'])
Войдите в полноэкранный режим Выход из полноэкранного режима

Кроме того, вы можете использовать различные функции:

/**
* Fetch all posts with user profile
* GET posts
*/
Route
  .get('', 'PostController.index')
  .middleware(['auth', 'guard: post.read, user.read'])
Войдите в полноэкранный режим Выход из полноэкранного режима
  • Предупреждение: Вам необходимо добавить промежуточное ПО по умолчанию auth * перед ** Cerberusguard! Предупреждение: Вам необходимо добавить промежуточное ПО по умолчанию auth перед Cerberusguard!

Потребительские модели

Вы должны использовать модели Cerberus Models для создания ролей, ресурсов и разрешений в своем собственном коде. Он также полезен для создания семян или полного CRUD для управления вещами Cerberus. Он прост в использовании:

Роли

  const Role = use('Cerberus/Models/Role')

  // Creating a new Role
  await Role.create({
    name: 'Jedi Master',
    slug: 'jedi'
  })

  // or

  let role = await Role.find(1)

  role.name = 'Wookie'
  role.slug = 'wookie'

  await role.save()

  // You can use any Lucid methods you want
Войдите в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий