如何在mysql中设计用于用户角色分配和区域分配的数据库结构?

如何在mysql中设计用于用户角色分配和区域分配的数据库结构?,mysql,Mysql,最近,我的公司分配给我一个项目,将管理我的公司营销团队。 我遇到了麻烦,或者无法决定数据库结构 在此项目中,具有以下访问角色: 1) 首席营销官(首席营销官) 2) ------总经理 3) --------区域经理 4) 第三十四条区域经理/国家元首 5) ------------------------------协助经理 6) -------------------------------------区域经理 7) -------------------------------------

最近,我的公司分配给我一个项目,将管理我的公司营销团队。 我遇到了麻烦,或者无法决定数据库结构

在此项目中,具有以下访问角色:

1) 首席营销官(首席营销官)

2) ------总经理

3) --------区域经理

4) 第三十四条区域经理/国家元首

5) ------------------------------协助经理

6) -------------------------------------区域经理

7) ---------------------------------------用户

访问级别将根据上述角色层次结构确定。
例如,CMO拥有完全访问权限,区域经理拥有除CMO之外的所有访问权限,等等

第二个主要问题是 区域(组合多个区域/状态后区域将生成) 区域/州(将在合并多个城市后创建) 地区/城市

现在,默认情况下,所有用户都将添加到任何区域中 然后管理员分配一个角色和一个地区或州或地区 最后,用户可以根据其角色和分配的区域/州/城市/地区访问系统

如果任何用户访问角色是区域经理,则分配区域,如Region1 现在,用户将能够访问区域1中的所有州/区及其城市


请帮助我设计管理所有这些内容的数据库结构?

在数据库中创建一个名为“用户”的表。在这里,您可以创建多个表或一个表。基本上,您希望在表中创建角色字段和区域字段。当用户登录时,将根据其角色(即1是gm,7是用户)/地区授予他们访问权限


对于您想要做的事情,有许多用多种语言预先构建的解决方案。我建议你找一个

为了表示层次结构,您可以使用
父角色id
列创建角色表,这意味着其他角色可以“坐在”父角色下

例如:

CREATE TABLE `roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role` varchar(45) NOT NULL,
  `parent_role_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
如果我想添加一个CMO,他们会保持这个字段为空,因为上面没有人。但是,区域经理的父id为
5
(假设CMO为1),因为他们在助理经理的领导下。这使您能够仅使用一个表构建类似文件夹的结构

其他用户到位置的关系可以通过多种方式实现。我认为最简单的方法是通过多对多关系,例如:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_roles`(
  `user_id` int(11) NOT NULL,
  `role_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_region` (
  `user_id` int(11) NOT NULL,
  `region_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`region_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果您正在寻找用于管理授权(又称权限)的访问控制列表(ACL),那么一个更为测试和灵活的解决方案可能是访问控制列表(ACL),具体取决于您使用的语言


AplexP感谢您的解决方案,它确实非常有用。主要问题可能是根据地区、州或城市分配管理访问权限。如果任何用户已分配了州,则他将能够访问这些所有用户的报告以及位于其分配州和城市下的详细信息。请提供帮助