Easy RBAC - Как вы загружаете структуру RBAC относительно пользователя - PullRequest
0 голосов
/ 16 февраля 2019

В настоящее время я создаю прототип Node JS API и внедряю авторизацию с использованием Easy RBAC

https://www.npmjs.com/package/easy-rbac

В этом модуле вы определяете модель RBAC, например:

{
  user: { // Role name
    can: [ // list of allowed operations
      'account', 
      'post:add', 
      { 
          name: 'post:save',
          when: async (params) => params.userId === params.ownerId
      },
      'user:create',
      {
        name: 'user:*',
        when: async (params) => params.id === params.userId
      }
    ]
  },
  manager: {
    can: ['post:save', 'post:delete', 'account:*'],
    inherits: ['user']
  },
  admin: {
    can: ['rule the server'],
    inherits: ['manager']
  }
}

Затем в функции вы можете задавать вопросы, такие как

rbac.can('user', 'post:save', {userId: 1, ownerId: 2})
  .then(result => {
    if (result) {
      // we are allowed access
    } else {
      // we are not allowed access
    }
  })
  .catch(err => {
    // something else went wrong - refer to err object
  });

. Что мне не ясно из документации, так это то, как это можно применить к конкретному пользователю, которому назначена роль.

Запуск "rbac.can" всегда будет приводить к истине, принимая приведенное выше определение, независимо от пользователя (поскольку это всего лишь определение модели RBAC)

Скажем, "ДжонDoe "играет роль" admin ".... (который мы храним в базе данных mongo)

Если не считать ...

if(userSession.hasRole("admin") && rbac.can("admin","post:save"....)

Как я могу проверить, есть ли" John "действительно может выполнить действие?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...