2015-04-21 2 views
4

Я работаю над проектом, где мне нужно, чтобы создать и назначить политику в соответствии с правами доступа/уровней пользователю в sails.jsКак создавать динамические политики в sails.js

Каждый пользователь может получить доступ на все уровни ниже его уровень, как администратор имеет уровень 9 и он может получить доступ на все уровни ниже уровня 9

в настоящее время в парусах все политики хранятся в

API/политики

папки и назначены на контроллер в

конфигурации/policies.js

module.exports.policies = { 

UserController: { 
    "create": ['canCreate'], 
    "list": ['canRead'], 
    "show": ['canRead'], 
}, 
AuthController: { 
    '*': true, 
}}; 

Мой вопрос, как я могу сделать динамические политики на основе уровней доступа, поступающих из БД

Я googled, но ничего не нашел о том, как создавать динамические политики в sails.js, поэтому размещайте здесь.

Цените свою помощь по этому вопросу.

Благодаря

ответ

2

ЗАКАНЧИВАТЬ sails-permissions.

Всеобъемлющие права пользователей и система прав на sails.js и Waterline. Поддерживает аутентификацию пользователя с помощью pass.js, разрешения на основе ролей, владения объектами и безопасности на уровне строк.

+0

спасибо за ответ, могу ли я использовать его без паспорта.js? –

+0

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

+1

oh yea, отказ от ответственности: я являюсь автором разрешений на паруса –

1

Простым методом было бы создание политики для каждого уровня доступа.

политика/level01.js политика/level02.js ect. , ,

ваш файл политики проверяет их сеанс/токен, чтобы убедиться, что они соответствуют критериям этой политики.

политика/level01.js

module.exports = function(req,res,next){ 
if(req.session.accessLevel = 1) return next(); 
return res.forbidden(); 
} 

Затем в конфиге

module.exports.policies = { 
UserController: { 
    "create": ['policyXX.js'], 
    "list": ['policyXX.js'], 
    "show": ['policyXX.js'], 
}, 
AuthController: { 
    '*': true, 
}}; 

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

+0

как я могу вызывать политики в соответствии с уровнем в конфигурации, так как каждый пользователь может иметь различный уровень доступа? –

+0

вы вызываете политики, основанные на ограничении конечной точки. Поэтому, если UserController.create ограничен теми, у кого уровень 4, например, то в приведенном выше примере вы положите ['policy04.js'] на действие create, а затем проверите check04.js, чтобы убедиться, что они действительно находятся на уровне 4. – Meeker

1

Решение @Travis Webb является хорошим. Вы также можете создавать роли модели и разрешение модели, связанные отношениями (от одного до многих, от многих до многих ....), Как вы хотите, а затем фильтровать их с политикой, как, что:

Пример:

module.exports = function isAdmin (req, res, next) { 
    if (typeof req.session.User != "undefined") { 
    User.findOne(req.session.User.id).populate('roles').exec(function(err,user){ 
      if(err) return res.forbidden('You are not permitted to perform this action.'); 
      if(!user) return res.redirect('/user/new'); 
      for(var i in user.roles){ 
       if(user.roles[i]['name'] == 'ROLE_ADMIN'){ 
        return next(); 
       } 
      } 
      return res.redirect('/user/show/'+req.session.User.id); 
     }); 
    } else { 
     return res.redirect('/session/new'); 
    } 
}; 

С наилучшими пожеланиями

0

год спустя полтора, если кто-то впадает в это, sails-must кажется Хорошее решение для этого.

RabbitController: { 
    nurture: must().be.a('rabbit').mother, 
    feed: [must().be.nice.to('rabbits'), must().have('rabbit').food] 
}, 

Отказ от ответственности: Я не использовал его сам.

Смежные вопросы