首先申明:我是做公司原有软件的一个外挂程序,所以每个用户权限可以在原系统中定义,主要分为:
1、超级用户:享有自己开发的外挂程序的所有使用权限;
2、本人权限:可以分为:新增、查询、修改、删除、审核、撤消审核、打印等权限控制,但只能处理本人的业务单据;
2、本人所属组权限:可以分为:新增、查询、修改、删除、审核、撤消审核等权限控制,可以处理本人所属组其他成员的业务单据;
2、本人所属组组之外权限:可以分为:新增、查询、修改、删除、审核、撤消审核等权限控制,可以处理所属组组之外的其他成员的业务单据;
在数据库表中这样存储着权限:
用户编号 程序编号 本人权限 本人所属组权限 本人所属组组之外权限 控制权 是否超级用户
001 A001 YYYYYYY YYYYYY YYYYYY N N
001 A002 YYYYYYY YYYYYY YYYYYY Y N
002 A001 YYYYYYY YYYYYY YYYYYY N N
003 A001 YYYYYYY YYYYYY YYYYYY N N
003 A002 YYYYYYY YYYYYY YYYYYY Y N
003 A003 YYYYYYY YYYYYY YYYYYY N N
004 Y
说明:
1、当超级用户为Y时,权限设置就为空,享有自己开发的外挂程序的所有使用权限;
2、YYYYYYY(表示用户有新增、查询、修改、删除、审核、撤消审核、打印),YYYYNNY(表示用户只有新增、查询、修改、删除、打印权,没有审核、撤消审核权);
3、控制权为N时,无论组权限与本人所属组组之外权限是什么值都不作用,只有当控制权为Y时,本人所属组权限与本人所属组组之外权限才起效!
要求就是:我自己写的外挂系统如何根据上述的要求,实现相应的权限功能? type
TRight = (rModule,rInsert,rModify,rDelete,rPrint,rReadAll,rApprove,rBack,rBatch);
function TBase_f.HaveRight(ModuleID,UserID: string; aRight: TRight): Boolean;
begin
with qry_BaseTemp do
begin
Close;
SQL.Text : = ' select * from SYS_RIGHT where 用户编号='' ' +
UserID + ' '' and 程序编号='' ' + ModuleID + ' '' ' ;
Open;
case aRight of
rModule: Result : = FieldByName( ' ModuleRight ' ).AsInteger = 1 ;
rInsert: Result : = FieldByName( ' InsertRight ' ).AsInteger = 1 ;
rModify: Result : = FieldByName( ' ModifyRight ' ).AsInteger = 1 ;
rDelete: Result : = FieldByName( ' DeleteRight ' ).AsInteger = 1 ;
rPrint: Result : = FieldByName( ' PrintRight ' ).AsInteger = 1 ;
rReadAll: Result : = FieldByName( ' ReadAll ' ).AsInteger = 1 ;
rApprove: Result : = FieldByName( ' ApproveRight ' ).AsInteger = 1 ;
rBack: Result : = FieldByName( ' BackRight ' ).AsInteger = 1 ;
else Result : = False;
end ;
Close;
end ;
end ;
1、超级用户:享有自己开发的外挂程序的所有使用权限;
2、本人权限:可以分为:新增、查询、修改、删除、审核、撤消审核、打印等权限控制,但只能处理本人的业务单据;
2、本人所属组权限:可以分为:新增、查询、修改、删除、审核、撤消审核等权限控制,可以处理本人所属组其他成员的业务单据;
2、本人所属组组之外权限:可以分为:新增、查询、修改、删除、审核、撤消审核等权限控制,可以处理所属组组之外的其他成员的业务单据;
在数据库表中这样存储着权限:
用户编号 程序编号 本人权限 本人所属组权限 本人所属组组之外权限 控制权 是否超级用户
001 A001 YYYYYYY YYYYYY YYYYYY N N
001 A002 YYYYYYY YYYYYY YYYYYY Y N
002 A001 YYYYYYY YYYYYY YYYYYY N N
003 A001 YYYYYYY YYYYYY YYYYYY N N
003 A002 YYYYYYY YYYYYY YYYYYY Y N
003 A003 YYYYYYY YYYYYY YYYYYY N N
004 Y
说明:
1、当超级用户为Y时,权限设置就为空,享有自己开发的外挂程序的所有使用权限;
2、YYYYYYY(表示用户有新增、查询、修改、删除、审核、撤消审核、打印),YYYYNNY(表示用户只有新增、查询、修改、删除、打印权,没有审核、撤消审核权);
3、控制权为N时,无论组权限与本人所属组组之外权限是什么值都不作用,只有当控制权为Y时,本人所属组权限与本人所属组组之外权限才起效!
要求就是:我自己写的外挂系统如何根据上述的要求,实现相应的权限功能? type
TRight = (rModule,rInsert,rModify,rDelete,rPrint,rReadAll,rApprove,rBack,rBatch);
function TBase_f.HaveRight(ModuleID,UserID: string; aRight: TRight): Boolean;
begin
with qry_BaseTemp do
begin
Close;
SQL.Text : = ' select * from SYS_RIGHT where 用户编号='' ' +
UserID + ' '' and 程序编号='' ' + ModuleID + ' '' ' ;
Open;
case aRight of
rModule: Result : = FieldByName( ' ModuleRight ' ).AsInteger = 1 ;
rInsert: Result : = FieldByName( ' InsertRight ' ).AsInteger = 1 ;
rModify: Result : = FieldByName( ' ModifyRight ' ).AsInteger = 1 ;
rDelete: Result : = FieldByName( ' DeleteRight ' ).AsInteger = 1 ;
rPrint: Result : = FieldByName( ' PrintRight ' ).AsInteger = 1 ;
rReadAll: Result : = FieldByName( ' ReadAll ' ).AsInteger = 1 ;
rApprove: Result : = FieldByName( ' ApproveRight ' ).AsInteger = 1 ;
rBack: Result : = FieldByName( ' BackRight ' ).AsInteger = 1 ;
else Result : = False;
end ;
Close;
end ;
end ;