在 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 - 定义能力