Неопределенный метод "admin" с использованием cancancan - PullRequest
0 голосов
/ 31 января 2019
class Ability
include CanCan::Ability

  user ||= User.new # guest user (not logged in)

  if user.admin
    can :manage, :all
  else
    can :read, :all
  end
end

Я использую has_many through ассоциацию.Имея 3 таблицы - User, Role и UserRole.Таблица UserRole используется для соединения таблиц пользователей и ролей.В таблице UserRole я храню user_id и role_id.Нет атрибута с именем admin.Как изменить приведенный выше код, чтобы проверить, является ли пользователь администратором?

1 Ответ

0 голосов
/ 31 января 2019

считайте, что в вашей таблице ролей есть поле 'name', и в нем есть какое-то содержимое ('admin', 'guest' и т. Д.)

откройте ваше приложение app / models / user.rb и добавьте метод ниже

def admin?
  self.roles.find_by_name('admin') ? true : false
  # since one user has many roles you should find by role name
  # whether it has role with name admin
  # if it find the record the method will return true 
end

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

class Ability
include CanCan::Ability

  user ||= User.new # guest user (not logged in)

  if user.admin?    # I changed admin to admin? to match method above
    can :manage, :all
  else
    can :read, :all
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...