经常会遇到这样的情况,一个管理系统,如果是管理员登录和一般用户登录的权限是不同的,如:管理员登录那么可以对数据库进行编辑、修改,但是一般用户登录则只能对数据库进行查询,请问这是怎么实现的?? 有源码示例吗???在线等...谢谢!
解决方案 »
- 有请秀锋大侠jadeluo:还是关于两字符串比较问题
- 高分求助~是delphi2005 bug吗?
- 怎样更改Wise安装画面中的“正在安装”画面 里的" wise 安装向导"字样
- 如何获取数据库的密码
- 谁能介绍一个读取网站源代码的方法来,最主要是占用CPU很少资源的.
- 怎样成批的控制其他窗体上的控件?
- IntraWeb的应用之动态创建IWDBGrid的Column段,为什么创建成功之后没有显示?(请看代码)
- 真的是巨难问题!!!如果能解决另开帖子补分!!
- 数据库连接的问题,我的ADOConnection换了地方就连不上了。(在线等待,大家帮帮忙)
- 问大家一个关于数据库权限的问题.多谢各位.
- 如何学好与精通Dilphi?
- 如何构建一个临时表A,然后向A里面插入查询的结果
PrintPower:boolean
CheckPower: boolean
....
end;定义一个全局powers变量,放在datamodule中,登陆的时候根据不同身份赋值即可
// 执行查询
function QuerySQL(const SQLString: string): Boolean;
var
i: Integer;
begin
MSG_SECURITY_ERR := ''; // 权限检查
if not CheckToken(SQLString) then
begin
Result := False;
Exit;
end; // 当数据库已连接
if MDM.MD.Connected then
begin
// 关闭Q_Login打开的表
MDM.Q_Login.Close;
with MDM.Q_Login.SQL do
begin
// 清除旧程序,添加新的SQL程序
Clear;
Add(SQLString);
end;
try
// 执行并捕获异常
MDM.Q_Login.ExecSQL;
except
// 如果异常,返回错误,并退出
on DBError:EDBEngineError do
begin
MSG_SECURITY_ERR := '执行SQL语句时发生错误。错误信息:'#13;
// 逐条返回异常信息
for i:= 0 to DBError.ErrorCount - 1 do
MSG_SECURITY_ERR := MSG_SECURITY_ERR + DBError.Errors[i].Message;
Result := False;
Exit;
end;
end;
// 打开Q_Login查询的表
try
// 执行过 SELECT 子句才能生成视图
if (Pos('SELECT', UpperCase(SQLString)) < 10) and ((Pos('SELECT', UpperCase(SQLString)) <> 0)) then
MDM.Q_Login.Open;
finally
Result := True;
end;
end
else begin
MSG_SECURITY_ERR := '数据库未连通。';
Result := False;
end;
end;
// 检查权限
function CheckToken(SQLString: string): Boolean;
begin
// 当不处于用户初始化状态时检查权限
if not bInitAdmin then
begin
// SQL中有 Insert 子句
if (Pos('INSERT', UpperCase(SQLString)) < 10) and
(Pos('INSERT', UpperCase(SQLString)) <> 0) then
begin
// 检查用户有否插入权限,这个HasToken函数就自己写了
Result := HasToken(AU_TOKEN_APPEND);
if not Result then
MSG_SECURITY_ERR := '当前用户没有插入权限对数据库进行操作。';
end
// SQL中有 Delete 子句
else if (Pos('DELETE', UpperCase(SQLString)) < 10) and
(Pos('DELETE', UpperCase(SQLString)) <> 0) then
begin
// 检查用户有否插入权限,这个HasToken函数就自己写了
Result := HasToken(AU_TOKEN_DELETE);
if not Result then
MSG_SECURITY_ERR := '当前用户没有删除权限对数据库进行操作。';
end
else if (Pos('UPDATE', UpperCase(SQLString)) < 10) and
(Pos('UPDATE', UpperCase(SQLString)) <> 0) then
begin
Result := HasToken(AU_TOKEN_EDIT);
if not Result then
MSG_SECURITY_ERR := '当前用户没有修改权限对数据库进行操作。';
end
else
Result := True;
end
else
Result := True;
end;