Rails管理Cancancan

时间:2018-11-10 11:39:29

标签: ruby-on-rails-5 cancancan administrate

我正在使用Rails来管理我的应用程序,但是我想限制通过管理仪表板对所管理资源的访问。

我还在Rails应用程序的其他部分中使用cancancan来管理访问和权限。

在管理人员中是否有人设法使用cancancan,以便管理仪表板可以使用cancancan中定义的功能,显示资源并应用相同的权限?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以在此处找到一些有关需要做的事情的信息: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进行基本资源授权。如果您需要限制对嵌套资源等的访问,则可能需要对字段视图进行进一步的自定义。但是从那时起,这应该是非常标准的。希望这可以帮助。 :)