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

时间:2017-12-26 21:45:27

标签: ruby-on-rails post devise authorization cancancan

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

cancan gem 这样做的好方法,但后来被cancancan取代,cancancan将完全按照你的意愿行事。查看有关定义能力的wiki,以便更好地了解这是如何完成的。

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

答案 1 :(得分: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