我正在使用的应用程序具有不同的用户角色客户端,项目经理和超级用户,在登录页面上,他们可以搜索文章,并且有一个高级过滤器可以在搜索后过滤掉记录。 赞:按作者过滤。
我想为客户隐藏高级过滤器,因为我想使用 cancancan 来定义能力。
目前我正在使用模型方法。这些方法根据用户类型返回true和false。
client?
project_manager?
super_user?
当前代码:
<% unless current_user.client? %>
<%=link_to "Advance Search", "#" %>
<%end%>
我想删除它并使用cancancan代替此。
<%if can? :filter, Article %>
<%=link_to "Advance Search", "#" %>
<%end%>
为此,我尝试了
cannot :filter, Article if user.client?
但这限制了所有用户进行过滤。
答案 0 :(得分:1)
您需要声明can
规则以实际允许用户:filter
。
can :filter, Article do |article|
!user.client?
end
或
unless user.client?
can :filter, Article
end
使用cannot
:
can :friend, User
cannot :friend, User do |other_user|
other_user.blocks?(user)
end
答案 1 :(得分:0)
答案 2 :(得分:-1)
你能试试吗
# in models/user.rb
def is?(role)
roles.include?(role.to_s)
end
# in models/articles.rb
can :filter, :all if user.is? :client || :super_user
上述过滤器只会使客户端或super_user可以过滤内容。