数据库结构:包括两张表BaseData和UserRightData,BaseData中是一张基本表,里面不区分用户,UserRightData是用户权限表,结构和BaseData一样,只是多了用户字段,增加用户时,就是从BaseData表中复制数据到UserRightData中,并标识用户ID。

字段说明:

FucCode:该字段与控件tag对应

FucName:功能名称

IsSel:是否有权限的标志

IsFuc:标识该项是否是可以执行的功能

FucPID:父节点ID,用来生成树形结构时用

权限管理单元:UserRightCenter

unit UserRightCenter;

interface

uses
Windows, Messages, SysUtils, Classes, Forms, Dialogs,ADODB; type
TUserRight = class
private
FConnection : TADOConnection;
FData: TADOQuery;
FUserID: Integer;
public
constructor Create(AConnection:TADOConnection);overload; //根据用户id创建对应的权限列表
function CreateRightListByUserID(uid:Integer):Boolean;
//根据用户id取得对应的权限列表
function GetRightListByUserID(uid:Integer):Boolean;
//根据用户id删除对应的权限列表
function DeleteRightListByUserID(uid:Integer):Boolean;
//根据记录id设置某个功能是否可用,funid:记录id,uid:用户ID,issel:是否可用
procedure SetFunEnable(funid,uid,issel:Integer);
//判断某个功能是否可用
function IsRightEnable(uid:Integer;fuccode:string):Boolean; procedure ShowUserRigthView(uid:Integer); property Connection: TADOConnection read FConnection;
property Data: TADOQuery read FData;
property UserID: Integer read FUserID write FUserID;
end; implementation
uses
UserRightView; { TUserRight } constructor TUserRight.Create(AConnection: TADOConnection);
begin
FConnection := AConnection;
FData := TADOQuery.Create(nil);
FData.Connection := FConnection;
end; function TUserRight.CreateRightListByUserID(uid: Integer): Boolean;
begin
Result := False;
DeleteRightListByUserID(uid);
FData.Close;
FData.SQL.Text := 'insert into UserRightData(fucid,fucpid,fuccode,fucname,IsFuc,IsSel,userid) '+
'select fucid,fucpid,fuccode,fucname,IsFuc,IsSel,'+IntToStr(uid)+' from BaseData';
FData.ExecSQL;
Result := True;
end; function TUserRight.DeleteRightListByUserID(uid: Integer): Boolean;
begin
Result := False;
FData.Close;
FData.SQL.Text := 'delete from UserRightData where userid='+IntToStr(uid);
FData.ExecSQL;
Result := True;
end; function TUserRight.GetRightListByUserID(uid: Integer): Boolean;
begin
FData.Close;
FData.SQL.Text := 'select * from UserRightData where UserID='+IntToStr(uid);
FData.Open;
end; function TUserRight.IsRightEnable(uid:Integer;fuccode: string): Boolean;
begin
FData.Close;
FData.SQL.Text := 'select * from UserRightData where userid='+IntToStr(uid)+
' and fuccode='+fuccode;
FData.Open;
if (FData.IsEmpty) or (FData.FieldByName('IsSel').AsInteger = ) then
Result := False
else
Result := True;
end; procedure TUserRight.SetFunEnable(funid,uid,issel: Integer);
begin
FData.Close;
FData.SQL.Text := 'update UserRightData set IsSel='+IntToStr(issel)+
' where UserID='+IntToStr(uid)+' and FucID='+IntToStr(funid);
FData.ExecSQL;
end; //这是现实权限管理界面的,也就是在上面设置用户权限,这个大家可以根据自己的需要用不同的方式去展现
procedure TUserRight.ShowUserRigthView(uid: Integer);
var
frm: TfrmUserRightView;
begin
frm := TfrmUserRightView.Create(nil);
try
frm.Caption := '用户权限列表';
frm.SetUserRight(Self);
Self.GetRightListByUserID(uid);
frm.ShowModal;
finally
FreeAndNil(frm);
end;
end; end.
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,UserRightCenter, StdCtrls, DB, ADODB; type
TfrmMain = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
ADOConnection1: TADOConnection;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
FUserRight : TUserRight;
public
{ Public declarations }
end; var
frmMain: TfrmMain; implementation {$R *.dfm} //现实用户权限列表
procedure TfrmMain.Button1Click(Sender: TObject);
begin
FUserRight.UserID := ;
FUserRight.ShowUserRigthView();
end; procedure TfrmMain.FormCreate(Sender: TObject);
begin
//ADOConnection1是你的数据库连接
ADOConnection1.Open;
FUserRight := TUserRight.Create(ADOConnection1);
end; //创建用户权限列表
procedure TfrmMain.Button2Click(Sender: TObject);
begin
FUserRight.CreateRightListByUserID(StrToInt(Edit1.Text));
end; //测试,查看权限,Button3的tag设置为10100003
procedure TfrmMain.Button3Click(Sender: TObject);
begin
if FUserRight.IsRightEnable(,IntToStr(TButton(Sender).Tag)) then
ShowMessage('可以使用')
else
ShowMessage('你没有使用权限')
end; end.

Delphi实现软件中登录用户的操作权限的更多相关文章

  1. centos 7 查看所有登录用户的操作历史

    2019-01-07 转自  https://www.cnblogs.com/kevingrace/p/7373146.html centos 7 查看所有登录用户的操作历史 在Linux系统的环境下 ...

  2. Linux 查看所有登录用户的操作历史

    在linux系统的环境下,不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录,可是假如一台服务器多人登陆,一天因为某人误操作了删除了重要的数据.这时 ...

  3. (4.25)Sqlserver中 登录用户只能看到自己拥有权限的库

    Sqlserver中 登录用户只能看到自己拥有权限的库 转自:https://www.cnblogs.com/huangtailang/p/4209180.html 相关参考:https://www. ...

  4. SQL Server中查询用户的对象权限和角色的方法

    --SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...

  5. SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据

    一.运行环境 系统:Windows 10数据库:SQL Server 2014数据库名: APP     新建的用户名: app 二.操作步骤 1.打开 MS SQL Server Managemen ...

  6. Tornado 判断用户登录状态和操作权限(装饰器)

    判断是否登录: def authenticated(method): '''''' @functools.wraps(method) def wrapper(self, *args, **kwargs ...

  7. Linux下记录登录用户历史操作

    前言:众所周知Linux是一个可以同时让多个用户登录的操作系统,每个用户的操作都影响着Linux运行,除了要做好安全工作以外,防止人为恶意损坏也是很关键的,比如有人恶意执行危险命令,要查找就得记录所有 ...

  8. Sqlserver中 登录用户只能看到自己拥有权限的库

    执行之前新建用户时不要赋予任何权限 USE master GO --将所有数据库的查看权限给Public角色,每个登录用户只能查看指定的数据库 --此语句会导致服务器上所有的用户在没有设置数据库权限的 ...

  9. oracle中新建用户和赋予权限

    1.新建个用户 create user xxxxx(用户名) identified by "密码" alert user 用户名 identified by “新密码” --修改用 ...

随机推荐

  1. 神州数码RIP路由协议

    实验要求:熟练掌握RIP配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 physical-l ...

  2. Server SSL certificate verification failed: certificate has expired, issuer is not trusted

    Unable to connect to a repository at URL 'https://xxxxx/svn/include' Server SSL certificate verifica ...

  3. angular上传获取图片的directive指令

    在AngularJS中,操作DOM一般在指令中完成,那么指令是如何实现的呢?指令的作用是把我们自定义的语义化标签替换成浏览器能够认识的HTML标签 一般的事件监听是在对静态的dom绑定事件,而如果在指 ...

  4. [转]谈谈 Bias-Variance Tradeoff

    https://liam0205.me/2017/03/25/bias-variance-tradeoff/ 谢谢原作者! 谈谈 Bias-Variance Tradeoff 发表于 2017 年 0 ...

  5. DG备库无法接受主库归档日志之密码文件

    DG备库无法接受主库归档日志之密码文件 实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志 本篇文章,测试sys用户与D ...

  6. Filter过滤器介绍

    简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...

  7. HDU 1000

    A + B Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  9. 实验吧—Web——WP之 因缺思汀的绕过

    首先打开解题链接查看源码: 查看源码后发现有一段注释: <!--source: source.txt-->这点的意思是:原来的程序员在写网页时给自己的一个提醒是源码在这个地方,我们要查看时 ...

  10. GraphQL Gateway Architectures

    转自: https://tomasalabes.me/blog/graphql/node/microservices/2018/08/11/graphql-architectures.html Gra ...