我的应用程序使用rails administratore,但我想通过administratore面板限制对所管理资源的访问。
我还在rails应用程序的其他部分使用cancancan来管理访问和权限。
是否有人在administrator中使用了cancancan,以便administrator仪表板可以使用cancancan中定义的功能,显示资源并应用相同的任务?
感谢
您可以在这里找到一些关于需要做什么的信息:https://administrate-prototype.herokuapp.com/authorization
这里提到的内容在过滤记录集合时效果良好,但在尝试授权单个资源时会中断。解决方案是覆盖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
进行基本资源授权。如果您需要限制对嵌套资源等的访问,则可能需要进一步自定义字段视图。但从那时起,这应该是非常标准的。希望这能有所帮助。:(