最近,我的公司给我分配了一个项目,该项目将管理我公司的营销团队。我遇到了麻烦,或者无法决定数据库结构。
在此项目中具有以下访问角色:
1) CMO (首席营销官)
2) -总经理
3) -区域经理
4) -区域经理/国家负责人
5) -协助经理
6) -区域经理
7)
访问级别将根据上面提到的角色层次结构确定。
例如,CMO拥有完全访问权限,区域经理拥有除CMO之外的所有访问权限,依此类推。
现在,第二个主要内容是Region (Region将在合并多个区域/州之后创建) Zone/State (它将在合并多个城市后创建) Area/City
现在,默认情况下将在任何区域添加所有用户,然后管理员分配角色和区域或州或区域,最后用户可以根据其角色及其分配的区域/州/城市/区域在系统中进行访问
如果任何用户访问角色是区域经理并分配了类似Region1 Now的区域,则用户将能够访问region1中的所有州/区域及其城市
请帮我设计管理所有这些东西的数据库结构?
发布于 2012-10-17 02:24:59
在您的数据库中创建一个标题为“users”的表。在这里,您可以创建多个表或一个表。基本上,您希望在一个或多个表中创建一个角色字段和一个区域字段。当用户登录时,将根据他们的角色(即1是总经理,7是用户)/region授予他们访问权限。
对于您想要做的事情,有许多语言版本的预置解决方案。我会推荐你去找一个。
发布于 2012-10-17 02:45:06
为了表示层次结构,您可以创建包含parent_role_id列的roles表,这意味着其他角色可以“位于”父角色之下。
例如:
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;如果您正在寻找用于管理授权(也称为权限)的访问控制列表( Access Control List,ACL),那么更具测试性和灵活性的解决方案可能是访问控制列表(ACL),具体取决于您使用的语言。
http://en.wikipedia.org/wiki/Access_control_list
https://stackoverflow.com/questions/12920917
复制相似问题