日期:2014-05-16  浏览次数:20427 次

怎样写层级查询条件?

如图,我要做个查询,总经理可以查看所有人员的,经理可以查看属于他自己模块下面的……业务员只能查看自己的,即节点越短,权限越大。要做个逐级权限控制的查询,这个条件要怎样写比较好?
------解决方案--------------------
应该在权限表里面设置LEVEL 当你的LEVEL最大的时候 自然就是最高权限

当然你的表需要设置成为 BOM 父子节点的。
------解决方案--------------------
联机丛书上输入CTE,下面有案例,你自己理解一下
------解决方案--------------------
引用:
Quote: 引用:

应该在权限表里面设置LEVEL 当你的LEVEL最大的时候 自然就是最高权限

当然你的表需要设置成为 BOM 父子节点的。

系统没有这样的权限表,也不存在LEVEL。。。悲催的
level是要查询的时候产生的,或者存在表的时候加列
------解决方案--------------------
这个用CTE递归查询来做咯 
------解决方案--------------------
这样 你按照节点排序 然后按照长度来判断权限大小。
------解决方案--------------------
你就一个表 实现不了啊。
------解决方案--------------------
就一个表的话就用01、01.01这个判断吧,01的可以看到所有01开头的,01.01的可以看到所有01.01开头的,以此类推
------解决方案--------------------
通常这类的需求都是在DAO (Data Access Object) 业务逻辑层实现的。

(1)如果一定要在数据库上实现,可以通过为不同人的role,创建特定的view,通过view来限制underlying table的访问范围
GRANT SELECT ON OBJECT:: [your_view] TO [your_role];

(2)随便想了个设计方案 ,属于天马行空:创建一套验证表,表如下person , group, role, permission, policy. 然后写一个store procedure ,通过SELECT CURRENT_USER 获取当前用户, 通过查询获得相关的role, group, permission, policy。而你的underlying table必须有role hierachy的fact table (总经理,经理,主管,员工) .通过role在underlying table的hierachy中获取行。如果你的业务规则很复杂,可以在policy里规定,并且在获取行的时候应用。在permission中也可以规定role 和metadata的访问权限(例如员工只能应对column (四级)),最后的查询语句是动态组合成的。