首先申明:我是做公司原有软件的一个外挂程序,所以每个用户权限可以在原系统中定义,主要分为:
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分求解,如果能满足要求,分数可以任意加!
解决方案 »
- 多线程操作时发生的问题
- 关于接口与类型转换的问题。 200506
- 如何用Delphi做一个记事本,最好有源程序?
- dbgridheh在画的时候不断闪烁,如何解决比较好!谢谢!
- 高分请问一个小问题?在VB中如何用DELPHI(听说有一个控件)将BMP转换为JPEG
- mdi 窗口的菜单问题!参与者都有分!
- 请问access数据库可以保存像网页之类的文件吗?
- 在Delphi中用ADO怎样连接Excel表
- 让我们一起来迎接新控件时代的到来吧! 转载luke fan 的blog
- 对多线程编写提点建议
- 为什么我的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也有问题,不知道如何处理!