web后台(访问)功能权限和数据访问权限的设计
开发后台功能的时候不可避免的要遇到多用户操作的功能,这个时候会涉及到两种权限的设计
(访问)功能权限
此权限是控制不同的用户操作后台的时候访问功能是不一样的,有些功能只对指定用户开放,这样的功能权限可以通过用户访问指定地址的时候判断url规则来控制是否可以访问
数据权限
多用户操作的访问权限搞定后,还有一个问题,就是数据库里有很多个用户录入的数据谁能访问哪些数据也是要有些限制的!
数据权限要根据实际的数据情况来设计的
第一种结构
比如一个客户资料管理系统,一个公司的组织架构一般都是 总监->经理->业务员等,每个业务员都可以录入一些客户资料信息,并且每个业务员都只能看自己的信息,而经理,总监是可以看到自己负责的下级录入的资料的
设置两个表kehu,user
客户资料表(kehu)字段为 kehu_id(自增),uid(用户id谁录入的信息).......其它一些客户资料字段
用户账户表(user)字段为 user_id(自增),nickname(名字),user_group(用户组),auth_key(访问key).......其它字段
业务员查看自己的资料时可以用下面sql语句
select * from kehu where uid=1
经理或总监查看时需要使用下面语句,需要查出来他们下面负责的业务员或经理的id
select * from kehu where uid in(1,2,3,4)
上面语句肯定是有问题的,业务员少的时候还好说但是当业务员多的时候,这个效率可想而知啦,这时候就得换另一个方法啦,上面用户表中有一个字段为auth_key(此列创建索引)就是利用这个值来控制,使用方法如下
总监分配为 10,11,12...
经理分配为 100001,100002,100003....
业务员分配 1000010001,1000010002,1000010003...
按上面的规则每加一级就在后面加4个数字,也就是可以加1000个账号(应该够用啦)这时查询语句就可以改为下面的
select * from kehu left join user on kehu.uid=user.user_id where auth_key like '10%'
使用自己的访问权限key字符串来进行查询,注意like前面不要加%不然不会使用索引
第二种结构
这种结构是一种指派型的,比如还是客户资料管理系统
设计三个表user(用户表),kehu(客户表),bind_kehu(绑定资料表)
user,kehu这两个表结构还是一样的
bind_kehu字段为
user_id(访问的用户id,当前登录的用户id)
uid(要被访问的用户id,这个id代表啦客户资料表的的对应数据,业务员或经理有录入信息功能的用户的id)
这种结构在功能操作上要比上面多一步,比如一个经理职位的账号添加完成后要设置这个账号可以查看哪些业务员的资料,这些权限信息要更新设置到bind_kehu表中如下
有5个业务员用户id为1,2,3,4,5。经理用户id为10且需要查看2,4,5业务员的信息,那么就要在bind_kehu表中添加三行数据分别为
user_id(10),uid(2);
user_id(10),uid(4);
user_id(10),uid(5);
从客户资料表查询数据时可以用下面语句
select * from kehu LEFT JOIN bind_kehu ON kehu.uid=bind_kehu.uid WHERE bind_kehu.user_uid=1 ORDER BY add_time desc
后面的条件是当前登陆的用户id