构建将拥有各种用户的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语句?
提前致谢!
答案 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角色进行重定向,从而向用户发送控制器的根或索引操作。