业务需求是1、销售员可以看见自己的客户
2、团队经理可以看见自己团队下所有销售员的客户
3、销售部的老总可以看见整个销售部门所有团队销售员的的客户
4、总经理看到所有的最初这个东西,是08年做的我当时是这样设计的dept 部门表user 人员表cust 客户表 range范围权限表range存储的是每个帐户拥有哪个部门的权限,两个字段 uid 员工id
ranges varchar(255)
如是普通人员则是空,
部门经理存部门表ID(5),或者有的部门经理管理两个部门(4,5)
老总们存(1,2,3,4,5)这样的部门ID标识
这样,在登陆时候,我就把每个人,主要是针对管理人员的所有部门权限ID,查出来,然后再对应查出来每个部门下的员工ID放到session中,如果$_SESSION['login']['user_ranges'] = '2,3,4,5,6,7';都是销售员的uid在客户列表页面,cust表中,有uid标识这个客户的所属销售员因此,经理们的列表的语句都是select * from cust where uid in ($_SESSION['login']['user_ranges'])最初数据量少,没感觉到什么现在数据量大了起来,cust表近百万了,公司的销售员使用crm人数也有近400个,公司权利较大的几个总查看列表时,那个条件,my goduid in (300多个员工id)速度明显慢了下来有高手说in多的话,索引已经无效了,最好不要这样用in,直接连表都比这个强当时我想着那么就连吧
select * from cust where uid in ($_SESSION['login']['user_ranges'])
这个语句是为了描述简单这样写的,但是实际项目中,因其他业务此语句已经关联了5个表如果把权限也连上,要再加上4个表,晕,难道以后每要看列表权限都要关联近10个表么请教这种情况该怎么个设计,求思路另外,其他的这种oa,crm系统,他们的权限是如何设计的?