【问题标题】:Accessing Devise helper methods from CanCan, etc从 CanCan 等访问 Devise 辅助方法
【发布时间】:2010-11-25 09:11:38
【问题描述】:

这似乎是一个我无法理解的简单问题。

在新的 Rails 3 应用上使用 Devise 进行身份验证,使用 CanCan 进行授权。

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

a.k.a.,类似这样的:

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 中定义。

【问题讨论】:

    标签: ruby-on-rails devise cancan


    【解决方案1】:

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

    在您的授权规则中访问user_signed_in? 是个好主意吗? ...因为授权只关心某人可以做什么,而不应该关心某人是否经过身份验证。

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

    这是一种分层方法:-)

    【讨论】:

    • 您可能希望未登录的用户能够读取资源但不能写入资源...这比authenticate_user 提供的更精细。
    • @PeterDeWeese 该问题并未规定匿名用户对资源具有读取权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多