数据库的权限设计是开发中一个比较棘手的问题,一般来说,如果只是简单的后台管理系统的管理员和普通管理员权限管理,可以只涉及两个主要的方面,一个是 用户,一个是权限,数据库表也可以依照此标准来设计。

比方说,user(用户表),action (权限表)。再加上一个中间表 user_action (用户权限表)。三张表,这个就可以满足基本的权限开发了。

 

  对于权限而言,如果不想频繁的给用户添加多个权限,可以添加一个 角色,角色可以理解为多个权限集合的权限集。可以给用户赋予角色,这样就可以不用频繁的给用户添加多个权限了,只需给用户赋予一个角色就行了。例如 : 可以设计一个 角色表 role,

同时角色表和用户之间是多对多的关系,因此,需要有一个张多对多的表,例如 user_role. 同样,角色和权限也是多对多的关系。所以,需要一个 角色和权限的中间表。例如 : role_action。所以如果给某个用户添加多个权限,可以通过赋予用户角色来优化这个问题,即是,

六张表,就可以了。

 

  如果有用户数量非常多,给如此多的用户分配权限,按照第一种的方式,三张表,是极其复杂的,按照第二种方式,六张表,也会很麻烦。所以,这里需要引入一个 ‘组’ 的概念,用来把用户根据一些特定的标识,来区分用户,进行分组。通过给用户的组进行权限的分

配,这样会大大降低工作量,也提高了效率。例如可以 新建一张 group (组) 表。这张表和用户表 (user) 、权限表(action)、角色表(role),都是多对多的关系。因此,需要有三张中间表,例如 group_user 、group_action、group_role 表。一共十张表,基本可以满足大部分的需

要有权限管理系统的需求了,但这也仅仅是满足大部分通用的权限的需求,实际开发,可能要远远不止这么简单,会很复杂。不过,这也不失为一个设计思路,可以继续延伸和扩展的。