Мульти-разрешения с Rolify gem для Ruby on Rails

У меня есть сомнения по поводу Rolify Gem для Ruby on Rails.

Я хочу создать разрешения для определенных организаций, например,

У меня есть права администратора для организации 1 (Organization.find(1))

У меня есть разрешение пользователя для организации 2 (Organization.find(2))

У меня есть разрешение модератора для организации 3 (Organization.find(3))

Организации разделены клиентом, и у меня может быть много разных разрешений в разных организациях.

Например, я пытался использовать в журнале user.add_role "full_admin", Organization.find(1), и у него не было той функциональности, на которую я надеюсь. В БД этот запрос Rolify armazened выглядит следующим образом:

2.1.5 :111 > user.add_role "full_admin", Organization.find(1)
  Organization Load (1.1ms)  SELECT `organizations`.* FROM `organizations` WHERE `organizations`.`id` = 1 LIMIT 1
  Role Load (1.2ms)  SELECT `roles`.* FROM `roles` WHERE `roles`.`name` = 'full_admin' AND `roles`.`resource_type` = 'Organization' AND `roles`.`resource_id` = 1 LIMIT 1
  Role Exists (1.0ms)  SELECT 1 AS one FROM `roles` INNER JOIN `users_roles` ON `roles`.`id` = `users_roles`.`role_id` WHERE `users_roles`.`user_id` = 1 AND `roles`.`id` = 7 LIMIT 1
 => #<Role id: 7, name: "full_admin", resource_id: 1, resource_type: "Organization", created_at: "2017-01-06 19:58:31", updated_at: "2017-01-06 19:58:31"> 

Буду очень признателен, если кто-нибудь сможет мне помочь, спасибо!


person Andre Leoni    schedule 10.01.2017    source источник


Ответы (1)


Rolify позволяет вам использовать роли с ограниченной областью действия, как показано в следующем коде. Я скопировал его с вики Rolify.

user = User.find(2)
user.add_role :moderator, Forum.first # sets a role scoped to a resource instance
user.has_role? :moderator, Forum.first
=> true
user.has_role? :moderator, Forum.last
=> false

Как видно из приведенного выше кода, вы можете установить разные роли для разных организаций. Вы можете рассмотреть возможность использования библиотеки, такой как "Pundit", для установки разрешений на основе роли.

person fossil    schedule 10.01.2017
comment
Спасибо за ответ, возможно, я сделал что-то не так, поэтому я снова посмотрю свой код, и если у меня есть другие сомнения, я свяжусь с вами, спасибо. - person Andre Leoni; 10.01.2017