当前位置:Gxlcms >
数据库问题 >
Oracle 函数 “数据控制,指定某些人只能查看他权限范围内的信息”
Oracle 函数 “数据控制,指定某些人只能查看他权限范围内的信息”
时间:2021-07-01 10:21:17
帮助过:38人阅读
create or replace function work_plan_mask (p_schema
VARCHAR2,p_table
VARCHAR2)
2
3 return Varchar2 AS -- 数据控制,指定某些人只能查看他权限范围内的信息
4
5 v_predicate
VARCHAR2(
1000) :
= ‘1=2‘;
6 v_personcode Personnel.Person_Code
%TYPE :
= SYS_CONTEXT(get_context_name,
‘PERSON_CODE‘);
7 v_user_name work_plan.reporter
%type :
= SYS_CONTEXT(get_context_name,
‘APP_USER_NAME‘);
-- 获取当前账号
8 v_number
NUMBER;
9
10 cursor get_work_plan_role
is
11 select count(
*)
12 from application_roles
13 WHERE role_name
= ‘work_plan_search‘ AND username
= v_user_name;
-- work_plan_search:系统里(给了权限)的角色
14
15 BEGIN
16
17 IF v_personcode
in(
‘00013‘,
‘00016‘)
THEN -- 指定这几个人可看
18 RETURN ‘1=1‘;
-- 返回 true
19 END IF;
20
21 insert into person_code_temp
-- 将下面查询出来的结果插入person_code_temp(临时表)表中
22 SELECT p.PERSON_CODE
-- 树状查询 (查出当前编号以及下一级、下下一级...等 编号,比如:总经理以及所有下属的编号)
23 FROM PERSONNEL p
24 CONNECT
BY p.MANAGER
= PRIOR p.PERSON_CODE
25 START
WITH p.PERSON_CODE
= v_personcode;
26
27 open get_work_plan_role;
28 fetch get_work_plan_role
into v_number;
29 close get_work_plan_role;
30
31 v_predicate :
= ‘reporter = ‘‘‘ || v_user_name
|| ‘‘‘ OR ‘ || v_number
|| ‘ > 0 ‘ ||
32 ‘ OR INSERT_USER = ‘‘‘ || v_user_name
|| ‘‘‘‘ ||
33 ‘ OR INSERT_USER IN ( SELECT get_username(P.PERSON_CODE) FROM person_code_temp P)‘;
34
35 RETURN v_predicate;
36 end work_plan_mask;
这个函数 SYS_CONTEXT(),可以参考 http://blog.csdn.net/rfb0204421/article/details/7861332 或 http://blog.csdn.net/kadwf123/article/details/8065673
Oracle 函数 “数据控制,指定某些人只能查看他权限范围内的信息”
标签:个人 sdn 查询 get int nbsp with span pen