仅列出允许用户查看的实例(他拥有访问权限的公共或私有)

时间:2012-06-03 23:10:52

标签: ruby-on-rails activerecord

我有一个Repository模型如下:

class Repository < ActiveRecord::Base

  belongs_to :user
  has_many :members, :class_name => :users
  has_many :datum

end

它有一个private布尔属性,表示它是否是一个公共存储库,即对每个人都可见。或者,如果它是私人存储库,只有他的成员可以看到。

只检索用户可以查看的存储库的最佳方法是什么?

逻辑是:如果它是公开的,只需检索它。如果它是私有的,请检查用户是否在成员列表中。

我相信我只需要在Repository控制器上创建一个方法来检查它,并使用它来验证用户是否可以访问它。但我无法找到最佳方法!

1 个答案:

答案 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。