Gem cancan 的用法的一个疑问

tsinghan · 2014年04月30日 · 最后由 mystery 回复于 2014年04月30日 · 2262 次阅读

我理解的 can 操作,会对访问每个 action 前 进行权限校验 但是有时候一些属性是在 action 里面给对象赋值的,比如下面的 company_id 和 team_id 这样在校验的时候 就拿不到 这两个属性值,can 方面里面就会返回 false,像这种情况一般是怎么解决的?还是我的用法不对?

can :create, Customer do |c|
     user.company_id == c.company_id && user.team_id == c.team_id
end

是否可以通过在 create action 里面对 c.company_id 和 c.team_id 赋值来解决你的问题。 cancan 只是确定能不能执行 create 这个 action,至于 action 产生对象的属性,还是在 action 里面来做更合适。

#1 楼 @xmonkeycn 恩 我也认为 cancan 只是能不能执行,但是具体逻辑业务,可能要另想办法了。

cancan 是判断用户对 action 有没有执行权限,至于 action 里的逻辑只能由程序人员来控制。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号