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

Authentication: Is it possible to use Devise sign up credentials to either restrict or grant access to the post model?

我在我的应用程序上安装了 Devise gem。我的应用程序中还有几个 post 模型。比如我有一个post模型供大家讨论'Basketball'、'Baseball,'和'Soccer'各种微post模型

但是,我想根据某些用户在注册 Devise 时提供的信息,限制某些用户 post 使用某些型号。例如,篮球模型中的 post,您必须提供邮政编码 04583、34039 或 49492。否则,用户将无法 post。

这可能吗?我认为 CanCan gem 最初是可能的,但现在我不确定。

谢谢!

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

康康舞 gem 是实现此目的的好方法,但此后已被康康康乐取代,康康康乐将完全满足您的要求。查看 wiki 关于定义能力的内容,以便更好地了解这是如何完成的。

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

首先,authentication/authorization 将发生在您的控制器中,而不是您的模型中。根据适当的 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