首先申明:我是做公司原有软件的一个外挂程序,所以每个用户权限可以在原系统中定义,主要分为:
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时,本人所属组权限与本人所属组组之外权限才起效!要求就是:我自己写的外挂系统如何根据上述的要求,实现相应的权限功能?暂时先抛出50分求解,如果能满足要求,分数可以任意加!
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时,本人所属组权限与本人所属组组之外权限才起效!要求就是:我自己写的外挂系统如何根据上述的要求,实现相应的权限功能?暂时先抛出50分求解,如果能满足要求,分数可以任意加!
解决方案 »
- 从文件中读入计算公式的问题!
- 请各位高手给点做题库的思路和方法
- 小问题
- delphi人士和使用过Tomcat的高手请进来指点迷津。没用过的也请搬个板凳进来一起学习(听课有分共120分)。
- 大虾请进,问个很菜的问题,但没办法解决,请各位帮帮忙(up有分!),谢谢了!!!!!
- 一个关于动态报表的问题
- 如何将real型转化成str型,我'编'了一个realtostr,但是不好使:)
- 请问如何把foxbase的db格式转换成access的格式?
- 大家快来发言!评书:《Delphi技术手册》
- 在VB6工程选单,引用窗口中为什么找不到Microsoft ActiveX Object Library ?
- 为什么我的delphi7的TWebBrowser控件没有OnGetExternal事件?
- 局域网访问 网络不通怎么判断
2、如果是超级用户,直接返回YYYYYYY
3、如果没有控制权,直接返回当前用户的个人权限
4、返回 本人权限 | 本人所属组权限 | 本人所属组组之外权限(这里是做类似二进制位的“或”操作。但是权限设置做成字符串“YY”的形式,实现起来就麻烦一点了,不过应该有现成的函数可调用吧)。
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;
自己把TRight改一下.
偶太笨了,没有办法搬到自己的程序里面去,请问没有详细的实现例子之类的?
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;
是对单个用户设置权限,可以改为组用户的权限:
rModule--打开,rInsert--新增,rModify--修改,rDelete--删除,rPrint--打印,rReadAll--读取所有,rApprove--核准,rBack--取消核准,把正这些都是你要定义的权限,在表中为字段。
TRight=(rModule,rInsert,rModify,rDelete,rPrint,rReadAll,rApprove,rBack,rBatch);
这句是否在单元文件的实现部份,在{$R *.dfm}之后?
function TBase_f.HaveRight(ModuleID,UserID: string; aRight: TRight): Boolean;
begin
with qry_BaseTemp do
这段在运行时,TBase_f.地方有错,qry_BaseTemp也有问题,不知道如何处理!