【问题标题】:Devise/CanCan - Restricted Content设计/CanCan - 受限内容
【发布时间】:2012-02-17 10:52:05
【问题描述】:

构建一个拥有不同用户的 rails B2B 应用程序。我很清楚使用 Devise 和 CanCan 限制内部员工的访问,但我也希望能够为供应商和客户提供自己的登录名。客户将相当简单,但是,我想确保供应商(标签)登录使他们能够查看和修改自己的产品和销售数据。

模型大致是:

User (as setup by Devise)
Label [has_many releases]
Release [belongs_to label / has_many products]
Product [belongs_release / has_many tracks]
Track [belongs_product]

我猜我可以在用户模型上添加 label_id 字段并以这种方式关联,但我需要内部用户(和客户)有权查看所有标签数据。我还需要允许一个标签有很多用户。

这仅仅是通过 Cancan 定义一个“标签”角色的情况,该角色强制在视图中使用 label_id 吗?如果这是正确的方法,那么我该如何将内容锁定到我的控制器/视图中的 label_id ?基于角色的 if 语句?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    您首先要做的是定义一些 CanCan 角色,例如供应商、客户和员工,然后创建一个插页式控制器来处理分叉:

    class CheckingController < ApplicationController
      def index
        @path = case user.role
          when 'supplier'
            supplier_path
          when 'customer'
            customer_path
          when 'staff'
            staff_path
          else
            admin_sign_in_path #or whatever
        end
    
        redirect_to @path     
      end
    end
    

    然后在您的 routes.rb 文件中,您可以将用户发送到控制器的根操作或索引操作,方法是首先将用户发送到 CheckingController#index,这将根据您的 CanCan 角色进行重定向。

    【讨论】:

    • 好的,非常感谢您的指点,我会去看看我的进展情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2013-09-04
    • 2023-03-21
    相关资源
    最近更新 更多