在我的应用程序中,我有一个名为Profile的模型,其中包含人员的个人资料信息。我还有一个用户模型,有些用户管理网站上的内容,他们的权限由Cancan gem管理。每个用户都有一个配置文件,但有许多配置文件与用户无关。假设我有两类用户,大量可以管理内容的“编辑”,以及一些可以做任何事情的“管理员”。我想这样做,以便编辑者可以管理(创建,编辑和删除)个人资料,除非该个人资料属于另一个用户。我怎么能用Cancan做到这一点?
我知道如何限制用户的能力,例如
can :manage, Profile, :user_id => user.id
但我想要一些类似于逻辑条件的内容,例如“可以管理个人资料,除非该个人资料与用户相关联且该用户不是当前用户”。
答案 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