Рельсы управляют канканканами - PullRequest
0 голосов
/ 10 ноября 2018

Я использую администраторы rails для своего приложения, но я хочу ограничить доступ через административную панель управления к администрируемым ресурсам.

Я также использую cancancan в других частях моего приложения rails для управления доступом и разрешениями.

Кто-нибудь сумел использовать cancancan в администрировании, чтобы панель управления могла использовать способности, определенные вcancancan, отображать ресурсы и применять те же разрешения?

Спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете найти некоторую информацию о том, что нужно сделать, здесь: https://administrate -prototype.herokuapp.com / авторизация

То, что там упомянуто, хорошо работает для фильтрации коллекций записей, но прерывается при попытке авторизации отдельных ресурсов. Решение состоит в том, чтобы переопределить метод find_resource. Вот окончательный рабочий код:

# app/controllers/admin/application_controller.rb

rescue_from CanCan::AccessDenied do |exception|
  flash[:notice] = "Access Denied"
  redirect_to admin_root_path
end

# Override find_resource, because it initially calls scoped_resource.find(param)
# which breaks since we are overriding that method as well.
def find_resource(param)
  resource_class.default_scoped.find(param)
end

# Limit the scope of the given resource
def scoped_resource
  super.accessible_by(current_ability)
end

# Raise an exception if the user is not permitted to access this resource
def authorize_resource(resource)
  raise CanCan::AccessDenied unless show_action?(params[:action], resource)
end

# Hide links to actions if the user is not allowed to do them      
def show_action?(action, resource)
  # translate :show action to :read for cancan
  if ["show", :show].include?(action)
    action = :read
  end
  can? action, resource
end

Это поможет вам начать базовую авторизацию ресурса с помощью CanCan. Может потребоваться дополнительная настройка представлений полей, если вам необходимо ограничить доступ к вложенным ресурсам и т. Д. Но с этого момента это должно быть довольно стандартным. Надеюсь это поможет. :)

...