Rails:我需要不同的AdminUsers来拥有不同的权限

时间:2018-09-29 04:32:20

标签: authorization admin activeadmin cancan

所以我将直奔主题。

我正在使用ActiveAdmin gem,所以我的应用程序中有AdminUser模型。现在我从客户那里得到了一个要求,即必须有一个“超级管理员”能够控制其他管理员的权限

例如,如果我有以下资源:MessageClientCountry,则“超级管理员”应该能够向AdminUser分配管理邮件的任务,另一项任务是管理客户,另一项任务是管理国家。

为此,我正在考虑向boolean表中添加几个admin_users属性。例如,将使用名为“ super_admin”的boolean属性来确定此AdminUser是否可以更改其他AdminUsers的权限,使用另一个称为message的属性来确定此{ {1}}可以控制(可以编辑,读取,删除等)消息,另一个名为country的属性可以用来确定此AdminUser是否可以控制(可以编辑,读取,删除等)。在各个国家等等...

出了什么问题?我无法AdminUser使用模型中的current_admin_user,所以我无法执行以下操作:

access

那我该怎么办?我必须构建此功能!

1 个答案:

答案 0 :(得分:0)

修改 我发现了这个为主动管理员https://github.com/yhirano55/active_admin_role

添加角色的宝藏

为什么要在模型中?代码看起来应该放在控制器中,allow_params ...

我会使用专家。我可以看到 can 已在5年前更新。他们很像。

权威回购:https://github.com/varvet/pundit

它使用策略,因此您可以为每个模型创建策略。

class PostPolicy < ApplicationPolicy
  def update?
    user.admin? or not record.published?
  end
end

您可以在其中检查有关更新,创建或显示或其他内容的标志...

在操作中,您使用类似这样的方式授权@post,:update?

引用他们的文档

在这种情况下,您可以想象授权会执行以下操作:

unless PostPolicy.new(current_user, @post).update?
  raise Pundit::NotAuthorizedError, "not allowed to update? this #{@post.inspect}"
end

希望这会有所帮助

P.S您需要更复杂的解决方案。我将创建角色模型,在其中可以指定模型,读取,写入权限。我会将其与用户链接到 has_many 角色,然后在我的策略中执行以下操作:

class PostPolicy < ApplicationPolicy
  def get_role
    user.roles.where(model: "Post").first
  end
  def update?
    user.get_role.write? or not record.published?
  end
end

或者在策略模型中也许有更好的方式使用它