我在一个Rails 3.2项目中使用devise和cancan。我有一个带有布尔标志public的事件模型。如果将事件标记为public => true,那么我希望任何人(无论是否登录)都能访问该记录。
GET /events/:id
如果将其标记为 public => false,则一系列cancan权限将决定对上述资源的授权和访问。实现这个最好的模式是什么?
我在一个Rails 3.2项目中使用devise和cancan。我有一个带有布尔标志public的事件模型。如果将事件标记为public => true,那么我希望任何人(无论是否登录)都能访问该记录。
GET /events/:id
如果将其标记为 public => false,则一系列cancan权限将决定对上述资源的授权和访问。 skip_before_filter :authenticate_user!, :only => :show, :if => lambda {
if params[:id]
@event = Event.find(params[:id])
@event and @event.public?
else
false
end
}
can :read, Event do |e|
some_other_authorization_boolean || e.public?
end
所有用户都将拥有此功能,即使未登录。