数据库应用系统权限控制-(行锁/按钮锁on java,php,aspx)

来源:互联网 发布:磁力链接在线播放软件 编辑:程序博客网 时间:2024/04/28 11:20
--------------------------------------------------------------------
function:数据库应用系统权限控制
file    :system_authority_plan.txt
author  :chinayaosir   QQ:44633197 
Tools   :Authentication and Authorization on enterprise system
date    :6/01/2011 
blog    :http://blog.csdn.net/chinayaosir
note    :禁止其它网站转载此文章
-----------------
detail list
用户密码检查锁
系统菜单权限过滤锁
管理员分配给用户的权限锁
系统工作流程中的行锁,按钮锁
--------------------------------------------------------------------


index.jsp/index.php/index.aspx
用户密码验证锁
用户密码验证锁函数
返回值设定:pass代表通过,fail代表密码不对
1.调用事件(登陆按钮调用)
2.dao函数String getloginlock(String u,String p);
3.DB函数f_getloginlock(u varchar2,p varchar2) return varchar2
password需要使用md5进行加解密
--------------------------------------------------------------------
menu.jsp/menu.php.menu.aspx
菜单检查锁
菜单锁函数
返回值设定:可用菜单对象列表
0.调用事件(网页加载完成后调用)
1.DAO函数list<T> f_getmenulist(String u);
--------------------------------------------------------------------
xxxxx.jsp/xxx.php/xxx.aspx
用户默认按钮锁
用戶按钮权限审核函数
返回值设定:4位权限控制符号XXXX=RWDP(1000=R---,1001=R--P,1101=RW-P,1111=RWDP)
0.调用事件(网页加载完成后调用)
1.dao函数String getuserrwdplock(String u,String m)
2.DB函数f_getuserrwdplock(u varchar2,m varchar2) return varchar2
实现方法=action+jndi+ejb+database function
it can used on java,php,.net 
--------------------------------------------------------------------
作业流程行锁 
查询数据时算出每行的权限(产品编号,订单号,采购单号,发票号)
工作流程的行锁函数加入到XXXXXXX视图的rowlock,网页界面按rowlock值做锁规则(修改/刪除限制)!
0.调用事件(查询视图)返回值设定:R,W(R=只读,M=修改)
//order item行锁定(R/M)? by item
1.v_itembasic.rowlock
2.DB函数f_getrowlock_item(item) return varchar2
1.v_oc_detail.rowlock
2.DB函数f_getrowlock_oc(oc,item,shdt) return varchar2
1.v_oa_detail.rowlock
2.DB函数f_getrowlock_oa(oc,item,shdt,fty)return varchar2
1.v_lp_detail.rowlock
2.DB函数f_getrowlock_lp(oc,item,shdt,fty,lp,ctns)  return varchar2
1.v_iv_detail.rowlock
2.DB函数f_getrowlock_iv(oc,item,shdt,fty,lp,inv)  return varchar2
--sample code see below
create or replace function f_getrowlock_oc(oc varchar2,item varchar2,sd date)
return varchar2
is
findrow  number(18,0);
returnv varchar2(1);


begin
      findrow:=0;
      returnv:='';
      select count(*) into findrow
      from  oa_factory
      where oc_number=oc and itemnumber=item and shipp_date=sd;
      if (findrow>=1) then
        returnv:='R';
      else
        returnv:='M';
      end if;
      return returnv;
end ;


//行锁函数f_getrowlock_oc应用到视图v_oc_detail代码
create or replace view v_oc_detail(
oc_number, 
itemnumber, 
shipdate, 
ordercqty,
rowlock)
AS
SELECT   
d.oc_number,
d.itemnumber,
d.shipp_date,
d.ordercqty,
f_getrowlock_oc(d.oc_number,d.itemnumber,d.shipp_date)
from  oc_detail d;


--------------------------------------------------------------------
作业流程的按钮锁
查询数据时算出页面按钮(save,delete,print)权限(产品编号,订单号,采购单号,发票号)
工作流程的按钮锁函数(数据查询完毕之后调用它)返回值设定:(WD,W-,--,-D)W=保存,D=删除
0.调用事件(网页数据装载时调用Action call ejb)
//itembasic(save和delete按钮锁可用)
1.DAO函数String getbtnlock_item(item)
2.DB函数f_getbtnlock_item(item varchar2) return varchar2
//order confirm(save和delete按钮锁可用?)
1.DAO函数String getbtnlock_oc(oc)
2.DB函数f_getbtnlock_oc(oc varchar2) return varchar2
//oa(save和delete按钮锁可用?)
1.DAO函数String getbtnlock_oa(oc)
2.DB函数f_getbtnlock_oa(oc varchar2) return varchar2
//lp(save和delete按钮锁可用?)
1.DAO函数String getbtnlock_lp(lp)
2.DB函数f_getbtnlock_lp(lp varchar2) return varchar2
//iv(save和delete按钮锁可用?)
1.DAO函数String getbtnlock_iv(iv)
2.DB函数f_getbtnlock_iv(inv varchar2) return varchar2
--sample code see below
create or replace function f_getbtnlock_oc(oc_i varchar2)  return varchar2
is
temp     varchar2(2);
saveflag varchar2(1);
delflag  varchar2(1);
eachrows  oc_detail%ROWTYPE;
cursor cursor_row is  select * from oc_detail where (oc_number = oc_i);
returnv    varchar2(2);
begin
 returnv:='--';
 temp:='';
 delflag:='D';
 saveflag:='W';
 --get delflag value
 open cursor_row;
  loop
    fetch cursor_row into eachrows;
    exit when cursor_row%notfound;
         temp:=f_getrowlock_oc(eachrows.oc_number,eachrows.itemnumber,eachrows.shipp_date);
         if (temp='R') then
           delflag:='-';
           exit;
         end if;
  end loop;
 close  cursor_row;


--get saveflag value
 open cursor_row;
  loop
    fetch cursor_row into eachrows;
    exit when cursor_row%notfound;
         temp:=f_getrowlock_oc(eachrows.oc_number,eachrows.itemnumber,eachrows.shipp_date);
         if (temp='R') then
           saveflag:='-';
         else
           saveflag:='W';            
           exit;  
         end if;
  end loop;
 close  cursor_row;
 returnv:=saveflag||delflag;
 return returnv;
end ;




--------------------------------------------------------------------