在 Rails 中具有角色的操作(不是模型!)的授权

Posted

技术标签:

【中文标题】在 Rails 中具有角色的操作(不是模型!)的授权【英文标题】:Authorization for actions (not models!) with roles in rails 【发布时间】:2012-11-22 14:15:40 【问题描述】:

如果我有一个具有一系列角色的简单 rails 用户模型,是否足以通过简单地检查该角色的模型角色属性并相应地阻止/继续来控制对操作的访问?

由于无法预见的复杂性,是否有我应该利用的高级系统?

重要提示:我不打算将用户/角色授权给模型(我已经知道 CanCan)。我希望在控制器级别进行安全性,以便我可以更详细地分解功能。

更重要的是:说真的,我不一定要问CanCan,请仔细阅读问题并注意! :)

【问题讨论】:

也许您不清楚如何利用 CanCan 的 Ability 模型来处理您的角色,但从您所要求的声音来看,CanCan 完全符合您的要求。也许我误解了;你的问题很抽象。 在你的行动中:授权! :show, @project 你们误会了。我不想根据模型进行授权。我在问题中说得很清楚! 你可以完全覆盖cancan的行为。结帐:github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocks 上一章(覆盖所有行为)。 它是否值得使用?我更想问我是否首先需要CanCan。 (未来的读者真的应该努力克服这个问题!) 【参考方案1】:

问题 1:是,问题 2:否。

我只是保持简单

如果在控制器中勾选models属性,控制器会限制所有没有设置该属性的用户。

例如:

def create
  @user.find(params[:user_id]) 
  if @user.admin?
  @post.new(params[:post]) 
  @post.create!
  end
end

在用户模型中创建一个方法

def admin?
  role == "Admin"
end

您应该编写比这更好的代码。控制器中有太多逻辑,但这将保留除管理员之外的所有内容。

【讨论】:

以上是关于在 Rails 中具有角色的操作(不是模型!)的授权的主要内容,如果未能解决你的问题,请参考以下文章

Rails 设计角色模型和 CanCanCan - 定义能力

使用关注点扩展具有角色的用户模型

Rails:在父模型的视图中创建一个 has_one 模型?

部分视图和视图的授权重定向

部分视图和视图的授权重定向

通过 Rails 5 中的另一个模型继承关联