怎样写层级查询条件?
如图,我要做个查询,总经理可以查看所有人员的,经理可以查看属于他自己模块下面的……业务员只能查看自己的,即节点越短,权限越大。要做个逐级权限控制的查询,这个条件要怎样写比较好?
------解决方案--------------------应该在权限表里面设置LEVEL 当你的LEVEL最大的时候 自然就是最高权限
当然你的表需要设置成为 BOM 父子节点的。
------解决方案--------------------联机丛书上输入CTE,下面有案例,你自己理解一下
------解决方案--------------------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 (四级)),最后的查询语句是动态组合成的。