Страницы

Поиск по вопросам

среда, 6 марта 2019 г.

Назначение ролей для прав доступа

Добрый день.
class Ability
can :manage, Company do |company| user.available_roles.include?(company.role) end
class User
belongs_to :company delegate :admin?, :operator?, :agent?, :sales?, :visitor?, :available_roles, :role, to: :company
class Company
has_many :users
def admin? role == 'admin' end
def operator? role == 'operator' end
def agent? role == 'agent' end
def sales? role == 'sales' end
def visitor? role == 'visitor' end
def available_roles case role when 'admin' %w[visitor sales agent operator admin] when 'operator' %w[visitor sales agent] else [] end end
class CompaniesController
authorize_resource
def new @company = Company.new respond_with @company end
def create @company = Company.create(company_params) respond_with @company end
При создании Компаний, Админ может определить роль компаний %w[visitor sales agent operator admin]
При создании Компаний, Оператор может определить роль компаний только [visitor sales agent]
Через консоль: User.last это user с правами operator
» Ability.new(User.last).can? :manage, Company.new(role: :admin, name: 'Company Administrator') User Load (1.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 Company Load (0.8ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1 [["id", 4]] # false
» Ability.new(User.last).can? :manage, Company.new(role: :agent, name: 'Company Agent') User Load (1.4ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT 1 Company Load (0.5ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1 [["id", 4]] # true
Но через веб интерфейс оператор может создать компанию с ролью admin и operator
Подскажите пожалуйста, что не так?


Ответ

Помогло в class CompaniesController
authorize_resource заменил на load_and_authorize_resource

Комментариев нет:

Отправить комментарий