设计/ CanCan - 限制内容

时间:2012-02-17 10:52:05

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

构建将拥有各种用户的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语句?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您首先要做的是定义一些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角色进行重定向,从而向用户发送控制器的根或索引操作。