我有一个Repository
模型如下:
class Repository < ActiveRecord::Base
belongs_to :user
has_many :members, :class_name => :users
has_many :datum
end
它有一个private
布尔属性,表示它是否是一个公共存储库,即对每个人都可见。或者,如果它是私人存储库,只有他的成员可以看到。
只检索用户可以查看的存储库的最佳方法是什么?
逻辑是:如果它是公开的,只需检索它。如果它是私有的,请检查用户是否在成员列表中。
我相信我只需要在Repository
控制器上创建一个方法来检查它,并使用它来验证用户是否可以访问它。但我无法找到最佳方法!
答案 0 :(得分:2)
简单的方法是使用授权库。我在所有项目中使用CanCan。
您可以用干净的可读方式声明访问权限。
can :read, Project, :active => true, :user_id => user.id
然后检查授权。仅当current_user有权访问项目时,此行才会显示链接。
<%= link_to 'A project', @project if can? :read, @project %>
有关更多信息,请阅读cancan的wiki。