CanCanCan 版本 3.4.0
我有一个具有很多权限的项目,例如基于用户角色:如果用户是员工,他可以:编辑,但不能:更新,只是由类似
can [:update], project if user.staff?
之类的东西定义。
到目前为止,一切都很好。
现在我想在项目锁定时将所有用户限制为只读。我的想法是做类似的事情
cannot %i[update update_extra_costs], Project, locked?: true
在能力模型的末尾。
问题是,就docs而言,为了简单起见,:update
和
:edit
是耦合的。如果我现在做
cannot :update
,它也会限制
:edit
!但是大多数用户应该能够看到表单(只读!)并且不能执行
:update
if can? :edit, Project #=> only if a can? is defined above
cannot [:update], Project, locked?: true
can [:edit], Project
end
can
之后的
cannot
做了允许
edit
但不允许
update
的伎俩!但这不是解决方案,因为它允许所有用户看到编辑视图!所以我尝试将其包装在 if 中,但它不起作用,因为
can?
在能力模型中不起作用。
问题
如何正确地做这样的事情?有没有办法取消
:edit
和
:update
的链接,这样
cannot :update
就不会影响
:edit
.locked?
方法来决定是否可以更新。