首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >acl9:提前确定授权

acl9:提前确定授权
EN

Stack Overflow用户
提问于 2009-12-21 17:55:45
回答 1查看 446关注 0票数 1

我在我的一个项目中使用了acl9,而不是authlogic。我喜欢这种方法,acl9的方法,但我猜我正在尝试做一些不那么简单的事情(不是说不可能)。

出于可用性的原因,我想有一个内联管理面板。例如,假设我得到了一个资源拍卖和一个嵌套的资源拍卖/出价。当普通用户在auctions/1 (1=id)上时,他应该看到“正常”内容(描述,价格...),同一站点上的特权用户应该有额外的链接来编辑拍卖(= auctions/1/edit)。这就是有趣的开始。

也许我看得不够近,或者在错误的地方,但我找不到方法来确定我的当前用户是否被授权进行编辑操作。显然,我可以向每个人显示链接,并让编辑操作拒绝普通用户,但这不是一个可行的选择。这里让我困扰的是,信息已经在系统中(参见下面的access_control块),而我似乎找不到使用它的方法。这在很多层面上都不是干的。

代码语言:javascript
复制
 access_control do
  allow :privileged, :to => [:index, :show, :edit, :update]
  allow anonymous, :to => [:new, :show, :create]
 end

如果我想要确定用户在auctions/1/bids/2/edit上拥有哪些权限,那就更糟了,因为这是在一个完全不同的控制器中。

如何提前访问该信息,然后决定是否显示要编辑的链接?这是不可能的(不改变acl9本身),还是我看得不够认真?有没有更符合我要求的授权插件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-24 06:22:17

你说“提前”访问是什么意思?您是想为不同的用户呈现不同的模板,还是只想在模板中使用条件来根据用户的访问级别隐藏/显示模板的一部分?我相信它应该像在代码或模板中包含如下内容一样简单:

代码语言:javascript
复制
if current_user.has_role?(:privileged)  
  # here goes the stuff that should be displayed to privileged user only  
end

如果您需要访问模板中的特定规则集(如“我是否允许此用户访问编辑操作?”)你不能用acl9做到这一点。我相信你无论如何都不应该这样做,因为将你的业务逻辑和身份验证控制绑定到你的控制器上似乎并不好--如果你决定明天重命名控制器,你的逻辑就会失败。但它可以看到两种方法来解决它。

  1. 将您的角色划分为更详细的角色。例如,将“特权”划分为“编辑者”、“创建者”、“删除者”等。因此,您可以使用这些较小的规则构建您的访问规则,并在模板中使用它们来对您的对象进行精细的control.
  2. Delegate角色检查。这是我在我的项目中通常采用的方式,因为它只允许使用全局角色,并让模型决定是否允许用户对其执行某些操作-例如,if @auction.allows_edit_for?(current_user) {}。它需要对acl9进行几次重写,不久前我曾在博客here中介绍过这种方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1939206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档