如何限制用户在视图中搜索特定模型?
How to restrict user to search for a particular model in view?
我正在使用的应用程序具有不同的用户角色客户、项目经理和超级用户,他们可以在登录页面上搜索文章,并且有一个 高级过滤器 可以在之后过滤掉记录搜索。 赞: 按作者过滤。
我想为客户端隐藏高级过滤器,为此我想使用 cancancan.
定义能力
目前我正在用模型方法来做。这些方法 return 根据用户类型判断真假。
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?
但这限制了所有用户的过滤。
您需要声明一个 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
你能试试这个吗
# 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可以过滤东西。
稍微改变角色如下
can :filter, Article unless user.client?
您可以从 here
了解康康舞的自定义角色定义
我正在使用的应用程序具有不同的用户角色客户、项目经理和超级用户,他们可以在登录页面上搜索文章,并且有一个 高级过滤器 可以在之后过滤掉记录搜索。 赞: 按作者过滤。
我想为客户端隐藏高级过滤器,为此我想使用 cancancan.
定义能力目前我正在用模型方法来做。这些方法 return 根据用户类型判断真假。
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?
但这限制了所有用户的过滤。
您需要声明一个 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
你能试试这个吗
# 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可以过滤东西。
稍微改变角色如下
can :filter, Article unless user.client?
您可以从 here
了解康康舞的自定义角色定义