【问题标题】:How to access users who did not confirmed and those who confirmed (Rails/Devise/cancan/rolify)如何访问未确认和已确认的用户(Rails/Devise/cancan/rolify)
【发布时间】:2013-07-14 18:51:44
【问题描述】:

我正在 Rails 上构建一个每日交易应用程序来训练自己使用 Ruby on Rails。

我已经使用 devise/cancan/rolify 安装了身份验证。

我想在 cancan 中创建两种类型的用户

  • 确认的用户
  • 尚未确认的用户

我怎样才能做到这一点?我如何访问拥有和未确认其帐户的用户(即点击通过电子邮件发送给他们的激活链接)。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise cancan


    【解决方案1】:

    confirmedunconfirmed 无需添加角色。您可以在ability.rb 文件中使用user.confirmed? 来控制授权:

    # models/ability.rb
    
    if user.confirmed?
      can :manage, Model
    end
    
    if !user.confirmed?
      can :view, Model
    end
    

    注意:您可以使用if/else 构造,但我更喜欢将我的规则很好地分开。

    关于您的 cmets,您正在重新实现已经完成的工作。使用 cancan,您可以使用 load_and_authorize_resource(请参阅:here)。

    class ProductsController < ActionController::Base
      load_and_authorize_resource
    end
    

    就是这样。如果用户在没有所需权限的情况下尝试访问,则会收到“未经授权”的响应。

    我强烈建议您通读 rolifycancan 的文档。

    【讨论】:

    • 谢谢,但是对于某些操作和页面,我想使用之前的过滤器来表示“好的,此操作/页面只能由确认的用户查看,并且如果用户访问它只是一个 not_confirmed 用户,然后向他显示此消息...我认为像未确认的用户这样的 sayign to cancan(设置规则)将由 Role="not_confirmed-users" 调用并由 Role = "确认用户Confirmed_users" 可以让我更轻松地管理它,但也许你是对的,我不需要创建一个新名称(就像我为其他角色所做的那样:比如用户、超级管理员、经理......
    • 没错,将角色类型用户状态分开。您可以创建您喜欢的任何规则,并在控制器中轻松授权。我会用一个例子来更新我的答案。
    • 那太好了。非常感谢(对不起新手的问题)
    • 用一个例子更新了问题,但这是直接从文档中提取的。我建议您至少阅读 rolify 和 cancan 的文档,然后进行设计。有关定义能力,请参见此处:github.com/ryanb/cancan/wiki/Defining-Abilities
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2017-10-07
    相关资源
    最近更新 更多