禁止:cancan 中的更新与:edit

问题描述 投票:0回答:1

CanCanCan 版本 3.4.0

github上有类似问题

我有一个具有很多权限的项目,例如基于用户角色:如果用户是员工,他可以:编辑,但不能:更新,只是由类似

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

    

ruby-on-rails cancan cancancan
1个回答
0
投票
我在模型级别解决了它,而不是通过康康。现在模型上有一个

.locked?

 方法来决定是否可以更新。

© www.soinside.com 2019 - 2024. All rights reserved.