身份验证:是否可以使用Devise注册凭据来限制或授予对帖子模型的访问权限?

问题描述 投票:1回答:2

我在我的应用程序上安装了Devise gem。我的应用程序中也有几个帖子模型。例如,我有一个帖子模型供人们讨论各种微型模型中的“篮球”,“棒球”和“足球”。

但是,我想根据他们在使用Devise注册时提供的信息限制某些用户在某些模型中发布。例如,要在Basketball模型中发布,您必须提供邮政编码04583,34039或49492.否则,用户将无法发布。

这可能吗?我认为它原本可以用CanCan宝石,但现在我不确定。

谢谢!

ruby-on-rails post devise authorization cancancan
2个回答
2
投票

注意不要将身份验证与授权混淆。设计用于身份验证,即用户就是他所说的人。你想要的是一种授权某些用户做某些事情的方法。

康卡斯宝石是一种很好的方法,但已经被cancancan取代,它将完全符合您的要求。查看wiki关于定义能力以更好地了解这是如何完成的。

请注意,您的授权方法完全独立于Devise,但您仍然可以使用您希望的用户的任何属性,即使它们是通过注册表单获得的。


0
投票

首先,身份验证/授权将在您的控制器中进行,而不是在您的模型中进行。根据适当的MVC架构,您的模型并不关心谁是谁。

要添加授权(我假设您已经处理过身份验证),您可以在ApplicationController中添加这样的内容:

def require_whatever_privilege
  unless <whatever your criteria is>
    # Option 1 – Raise a routing error:
    raise ActionController::RoutingError.new("You don't have access to this!")

    # Option 2 – Render a 403 page, if you have one:
    return render file: 'public/403.html', status: :forbidden
  end
end

然后,您只需将过滤器添加到要在其中使用的控制器中:

before_action :require_whatever_privilege

或者,如果您只想在控制器上使用特定方法的过滤器,则可以执行以下操作:

before_action :require_whatever_privilege, only: :index
© www.soinside.com 2019 - 2024. All rights reserved.