如何使用Cancan授予用户异常权限?

时间:2016-04-19 14:25:42

标签: ruby-on-rails cancan

在我的应用程序中,我有一个名为Profile的模型,其中包含人员的个人资料信息。我还有一个用户模型,有些用户管理网站上的内容,他们的权限由Cancan gem管理。每个用户都有一个配置文件,但有许多配置文件与用户无关。假设我有两类用户,大量可以管理内容的“编辑”,以及一些可以做任何事情的“管理员”。我想这样做,以便编辑者可以管理(创建,编辑和删除)个人资料,除非该个人资料属于另一个用户。我怎么能用Cancan做到这一点?

我知道如何限制用户的能力,例如

can :manage, Profile, :user_id => user.id

但我想要一些类似于逻辑条件的内容,例如“可以管理个人资料,除非该个人资料与用户相关联且该用户不是当前用户”。

2 个答案:

答案 0 :(得分:1)

@Laurens是对的。使用cancancan。
您也可以将块传递给can或can方法,例如:

cannot :manage Profile do |p|
  cond1 = method_that_returns_boolean
  cond2 = method_that_returns_boolean
  cond1 && cond2
end

表示如果cond1和cond2都为真,则用户无法管理配置文件。

答案 1 :(得分:0)

CanCan已过期。

我建议你研究一下https://github.com/CanCanCommunity/cancancan/

获得你想要的(未经测试的)

can :manage, Profile, :user_id => [nil, user.id]

对于更复杂的情况,您可以使用块定义能力: https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities-with-Blocks