AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как правильно определять роль с помощью cancancan gem?

Добрый день!
Подскажите как правильно определять права пользователя.
Пишу приложение для документооборота между компаниями, у пользователя может быть много компаний, у компании может быть много пользователей, у пользователя есть права администрировать организацию, отправлять документы, создавать документы. Сделал все следующим образом из гемов выбрал Devise, Cancancan, rolify
Class User < ActiveRecord::Base
  rolify strict: true
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :companies, through: :users_companies
  has_many :users_companies
  has_and_belongs_to_many :roles, :join_table => :users_roles
end


class Role < ActiveRecord::Base
  resourcify
  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true

  scopify
end

class Company < ActiveRecord::Base
  resourcify
  devise :database_authenticatable, :registerable
  has_many :users_companies
  has_many :users, through: :users_companies
end


с добавлением прав пользователю вроде все понятно добавлять права User.add_role(:admin, current_company), добавляет роль с указанием к какой именно компании принадлежит эта роль, но с ability не знаю как определять к то ли компании принадлежит юзер
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # in case of guest
  if user.has_role? :super_admin
    can :manage, :all
  else
    can :read, :all
  end
  if user.has_role? :admin
    can :manage, Company # не знаю как тут проверять есть ли у пользователя роль в этой компании и какая логика у проверки? что он делает и каким образом не понятно
  end
  end
end

Подскажите что делать?
  • Вопрос задан
  • 596 просмотров
Пригласить эксперта
Ответы на вопрос 1
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
can :update, Company do |company|
  user.has_role?(:admin, company)
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы