Rails вложенное соединение с условиями - PullRequest
1 голос
/ 28 сентября 2011

У меня есть следующие таблицы соединений и (соответствующие модели и таблицы)

  • role_users: user_id, role_id
  • permissions_roles: роль_идентификатора, идентификатор_получения, идентификатор_объекта, тип_объекта

Для данного пользователя, разрешения и объекта я хотел бы выяснить, есть ли у пользователя соответствующее разрешение для объекта через его роли.

Любая помощь с соответствующим запросом будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Если у вас есть пользователь и объект, как об этом:

allowed = user.roles.joins(:permissions => :object).where(:object => { :id => object.id }).any?
0 голосов
/ 28 сентября 2011

Попробуйте:

class User

  def has_permission?(permission, object)
    RoleUser.joins(:permission_roles).where(
      :roles_users      => {
        :user_id       => id
      },
      :permission_roles => {
        :permission_id => permission,
        :object_type   => object.class.base_class.name,
        :object_id     => object
      }
    ).exists?
  end
end

Теперь вы можете проверить разрешение следующим образом:

current_user.has_permission?(@edit_permission, @blog_post) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...