用户角色随项目而变化

时间:2018-02-26 06:49:36

标签: ruby-on-rails database

我需要在我的应用中关联。

User has many role,
Project has many user,

user1:项目1&经理项目2的员工

我不知道如何设置这些表和模型之间的关系。

用户角色项目

我该如何设置?

非常感谢你的建议。

4 个答案:

答案 0 :(得分:0)

您需要做的只是使用一些宝石。

  1. Devise
  2. Rolify
  3. 然后创建project模型+控制器+视图。

    创建新用户 - User.create(email: "user1@example.com", password: "123123")

    为新创建的用户添加角色 - User.last.add_role(:manager)

    创建另一个用户 - User.create(email: "user2@example.com", password: "123123")

    为新创建的用户添加角色 - User.last.add_role(:employee)

    现在,如果您正确执行所有步骤,则创建一个新项目:

    user1_project = User.find(1).projects.new(project_params) 
    

    它将为具有经理角色的电子邮件 user1@eaxmple.com 的用户创建一个项目。

答案 1 :(得分:0)

你可以做这样的事情,

创建表调用角色并为每个role_type提供唯一ID,例如

1为经理,2为员工,3为业主等。 并创建另一个包含以下字段的表,

USER_ID,ROLE_ID,PROJECT_ID

因此,如果user1是project1的经理,那么我们将有一个带有以下条目的条目

user_id = 1,role_id = 1,project_id = 1

和user1是project2的员工将有一个条目,

user_id = 1,role_id = 2,project_id = 2

此处role_id 1和2分别对应经理和员工。

答案 2 :(得分:0)

如果您询问如何将关系添加到表中。

这是一个例子

让我们说

Users -> user1, user2
Roles -> Role1, Role2
Projects -> P1, P2

Users -> Roles ( foreign key relationship ) users depends on Roles
Roles -> Projects ( foreign key relationship ) Roles depends on Projects

这里让我们将项目视为角色可以访问它们的资源

Users -> Roles -> Projects

角色可以拥有P1的读取权限和P2等的读写权限

答案 3 :(得分:0)

您可以实现此设置Rolify gem。

class User < ActiveRecord::Base
  rolify
end


class Project < ActiveRecord::Base
  resourcify
end

现在,您可以通过指定特定项目对象或Project类或不使用这些角色来向用户对象添加多个角色。例如:

user = User.create(user_params)

project_1 = Project.create(project_params)
project_1 = Project.create(project_params)

# Add roles with respect to specific project object
user.add_role('manager', project_1)
user.add_role('employee', project_2)

请仔细阅读rolify documentation以获取详细的概述和使用示例。