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