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

Как правильно организовать права доступа rails?

Добрый день!
В моем приложении у юзера может быть много компаний, и разные права в компаниях, в одной он может делать все что захочет, а в другой только обмениваться сообщениями, в связи с этим возник вопрос как правильно разграничить права точнее определять компанию, использую 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


Как правильно определить компанию? чтобы можно было правильно разграничить права? чтобы модератор компании Рога и Копыта который по совместительству работает уборщиком в компании Фисташки не смог убираться в компании Рога и Копыта
Посоветуйте пожалуйста что нибудь!
  • Вопрос задан
  • 728 просмотров
Пригласить эксперта
Ответы на вопрос 1
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
В user_roles добавить связь к компании company_id

В cancancan проверять доступ по конкретной компании. Чтобы передать компанию в ability из контроллера - нужно переопределить метод current_ability насколько я помню.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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