0

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

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

1)CMO(首席营销官)

2) ------------总经理

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

4) ------------区域经理/州负责人

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

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

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

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

现在第二个主要的事情是区域(区域将在合并多个区域/州后制作)区域/州(将在合并多个城市后制作)区域/城市

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

如果任何用户访问角色是区域经理并分配像 Region1 这样的区域现在用户将能够访问 region1 中的所有州/地区及其城市

请帮我设计管理这些所有事情的数据库结构?

4

2 回答 2

0

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

对于您想要做的事情,有很多多种语言的预构建解决方案。我会建议搜索一个。

于 2012-10-16T18:24:59.333 回答
0

为了表示层次结构,您可以创建您的角色表,其中包含一个parent_role_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)。

http://en.wikipedia.org/wiki/Access_control_list

于 2012-10-16T18:45:05.803 回答