Ruby on rails 绕过对标记为public的特定记录设计授权的最佳方法是什么
我正在Rails 3.2项目中使用Desive和cancan。我有一个带有 布尔标志公共。如果事件标记为public=>true,则我希望任何人,无论是否登录,都能够使用访问记录Ruby on rails 绕过对标记为public的特定记录设计授权的最佳方法是什么,ruby-on-rails,devise,cancan,Ruby On Rails,Devise,Cancan,我正在Rails 3.2项目中使用Desive和cancan。我有一个带有 布尔标志公共。如果事件标记为public=>true,则我希望任何人,无论是否登录,都能够使用访问记录 GET /events/:id 如果标记为public=>false,则一系列cancan能力将决定对上述资源的授权和访问 实现这一点的最佳模式是什么?您可以通过跳过用户身份验证来做到这一点!如果你有这个args skip_before_filter :authenticate_user!, :only =>
GET /events/:id
如果标记为public=>false,则一系列cancan能力将决定对上述资源的授权和访问
实现这一点的最佳模式是什么?您可以通过跳过用户身份验证来做到这一点!如果你有这个args
skip_before_filter :authenticate_user!, :only => :show, :if => lambda {
if params[:id]
@event = Event.find(params[:id])
@event and @event.public?
else
false
end
}
否,不要跳过身份验证。您想跳过授权。更好的解决方案是使用public=>true显式授权事件 在您的cancan能力课程中:
can :read, Event do |e|
some_other_authorization_boolean || e.public?
end
这种能力将给予所有用户;即使是未登录的资源。实际上,参数是资源中的一个字段,但现在我想我当然可以在lambda中加载资源并检查该字段。参数[:id]是资源标识符,如果资源被标记为公共,则不需要身份验证。你能推荐另一种方法吗?这个解决方案似乎不受欢迎。检查此项:。如果不跳过身份验证,则会返回到注册屏幕。只有在设计验证有机会取消筛选链后,才能进行CANCAN授权。