2010-11-25 48 views
1

这似乎是一个简单的问题,我只是无法环绕我的头。从CanCan等访问设计辅助方法

在新的Rails 3应用程序中使用Devise进行身份验证和CanCan授权。

如何访问CanCan提供的Ability类中的ApplicationController中定义的方法?

亦称,这样的事情:

class Ability 

    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # Guest user. 

    can :create, Post if user_signed_in? 

    end 
end 

其中user_signed_in?ApplicationController定义。

回答

3

这可能不是你想要的答案,但它似乎是你想混合不应该混合的代码问题。

在授权规则中访问user_signed_in?是个好主意吗? ...由于授权只关心某人可以做什么,并且不应关心该人是否被认证(或不认可)。

在您的Posts控制器上过滤器(before_filter :authenticate_user!)之前检查您的用户是否已通过身份验证应该足以实现您的目标;您的授权规则可以运行以及身份验证检查,而不是与其代码混淆。

这是:-)

+1

分层的方法你可能想谁没有登录用户能够读取一个资源,但不能写呢?这是比'authenticate_user`更细化会提供。 – 2012-02-03 02:39:45