can?
实际上在AA中工作吗?使用AA 2.6.1以及Rails 6和Ruby 2.6.5。
[我在latest AA documentation和许多其他文章中看到,can?
方法应该在AA资源控制器中可调用,例如
index do
column :title, sortable: false
column :secret_data if can? :manage, Post
end
但是,如果将这样的if语句添加到:index
列中,则会出现错误。“未定义的方法可以吗?”为零:NilClass“
这是一个简单的上下文,应该适合初学者,但是我想做的事情有些复杂。
我有一个AdmixUser模型和一个Group模型,以及一个嵌套资源Grouprelationship,用于存储AdmixUser在Group中的角色。在Group#show页面上,有一个table_forgroup的关系,如下所示:
table_for resource.grouprelationships do
column :action_test do |gr|
para link_to "Edit Relationship", edit_admix_grouprelationship_path(gr.id)
end
end
以及我的Ability.rb
:
can :read, Grouprelationship, group_id: mygroups
can :update, Grouprelationship do |gr|
user_role=Grouprelationship.find_by(admix_user_id: user.id, group_id: gr.group_id).role
return true if user_role==Grouprelationship::PI #PI can do anything
end
这里的逻辑是,如果我在组中的角色是“ PI”,那么我一个人就能更新组中其他人的角色。
就AA而言,此逻辑工作正常。如果非PI用户遵循表中的link_to
,则它肯定会执行Ability类中的块,并且控制器将闪烁一条通知,表明该操作未被授权。但是,最好不要先提供指向未授权页面的链接,这样会更清洁。如果我将link_to
行更改为:
para link_to "Edit Relationship", edit_admix_grouprelationship_path(gr.id) if can? :update, gr
然后抛出相同的未定义方法错误。
很难在AA中找到有关can?
方法的最新讨论。在较早的时候this link,似乎有必要用load_and_authorize_resource
修改资源的控制器,但该方法在我的AA控制器中不存在。
所以最后一个问题是如何配置资源以便启用can?
,否则我做错了什么?
可能会有一些复杂性,因为我使用的是自定义用户模型“ admix_user”和名称空间“ admix”,但由于CanCanCan授权在除上述can?
的上述用法之外的每个AA上下文中都有效,因此我似乎已经正确设置了此设置。 >
可以吗?实际在AA工作?使用AA 2.6.1,Rails 6和Ruby 2.6.5。我在最新的AA文档和许多其他文章中看到可以吗?方法应可在AA资源中调用...
阅读AA文档,正确的用法不是can?
,而是authorized?
。即在我的控制器中,当我使用