Добрый день!
В моем приложении у юзера может быть много компаний, и разные права в компаниях, в одной он может делать все что захочет, а в другой только обмениваться сообщениями, в связи с этим возник вопрос как правильно разграничить права точнее определять компанию, использую cancancan для авторизации и получилось следующее
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :companies, through: :users_companies
has_many :users_companies
has_many :users_roles, dependent: :destroy
has_many :roles, through: :users_roles
validates :first_name, :last_name, presence: true
def has_role?(role_sym)
roles.any? { |r| r.name.underscore.to_sym == role_sym }
end
end
class Role < ActiveRecord::Base
has_many :users_roles
has_many :users, through: :users_roles
end
class UsersRole < ActiveRecord::Base
belongs_to :user
belongs_to :role
#belongs_to :company
end
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # in case of guest
if user.has_role? :admin
can :manage, :all
else
can :read, :all
end
if user.has_role? :moderator
can :manage, Company
else
can :read, :all
end
end
end
Как правильно определить компанию? чтобы можно было правильно разграничить права? чтобы модератор компании Рога и Копыта который по совместительству работает уборщиком в компании Фисташки не смог убираться в компании Рога и Копыта
Посоветуйте пожалуйста что нибудь!