delphi+access权限管理设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi+access权限管理设置相关的知识,希望对你有一定的参考价值。
我在做一个物流仓库管理的程序,在设置权限管理方面遇到了一些麻烦,我们三个人,一个是管理员,两个是下属,所以想通过权限设置来限制下属的一些功能,比如说管理员能够看到的界面而下属不一定能够看到。access的数据库也写好了,就是在delphi里面写程序代码的时候遇到了一些问题,不知道怎么写,请高手指点一二。能够告诉我写权限管理的程序代码的一些基本写法吗?最好是告诉我程序代码。权限管理主要是针对哪个组件的?谢谢!!!
以前写过这样的程序。
很啰嗦的。没有找到现成的组件。
原理是对菜单、工具栏按钮,针对不同的用户设置不同的权限(Enable和Visible)。
1、用户的权限设置一般是字符串,不同位置的值代表不同的权限,存在数据库字段里。
2、软件启动完成后首先加在权限变量然后设置不同的菜单、按钮等等的可用状态。
3、一般在权限字段建议加密存储,并建议加密时候考虑和用户名绑定操作。 参考技术C 在DELPHI中技巧实现权限管理
在运用DELPHI编制一些应用系统时,有很多时候都需要给不同的用户赋予不同的权限,而不同的系统又有不同的权限分配方式,如果在程序中去为每一位用户分配权限的话,不仅使得程序的编制十分麻烦,而且也不利于管理!笔者近日想得一自认为比较好的方法,愿与大家共享,并望各位多指教!
在很多的系统中,权限通常是被分成几级的。每一级的用户所能实现的操作是不同的,而实现这一功能的方法一般都是让不同权限的用户见到不同的菜单。简单的说就是对不具有某一权限的用户这一菜单就是不可见的!为了实现这一控制,程序员们往往得花费很多的时间去做这一模块,浪费了很多宝贵的时间!
笔者的想法是:如果设一个二维数组,第一维代表第一级菜单,第二维代表子菜单,每一个数组元素只存储0或1这两个数,某一权限的用户对应着一个二维数组,而这个数组又代表了相应的菜单。给某一级别的用户分配权限后,他便拥有了一个相应的数组。登录时,从数组中取出各个元素的值,如果为1则相应的菜单出现,为0则不出现菜单。用这种方式不但可以分级(同一级用户的数组相同),还能实现在不同的用户间实现权限细分,只要你修改相应的数值为0或1即可!
上面是一个简单例子的运行结果。
下面是部分源程序(这仅是一个解释性的例子程序),为了简便,程序中只有一个窗体和一个主菜单。在创建窗体时初始化数组M,显示时读出数组值并通过设置菜单的Enabled属性或者Visible属性的True或False来控制显示!!
var
Form1:
TForm1;
m:array[0..1,0..4]
of
integer;//定义存储的数组
i,j:integer;//定义循环的变量
implementation
$R
*.dfm
procedure
TForm1.FormShow(Sender:
TObject);
begin
//读出数字并控制菜单的显示
for
i:=Low(m)
to
High(m)
do
for
j:=Low(m[i])
to
High(m[i])
do
begin
if
m[i][j]=0
then
MainMenu1.Items[i].Items[j].Enabled:=false
else
MainMenu1.Items[i].Items[j].Enabled:=true;
end;
end;
procedure
TForm1.FormCreate(Sender:
TObject);
begin
//下面是初始化
k:=0;
for
i:=Low(m)
to
High(m)
do
for
j:=Low(m[i])
to
High(m[i])
do
if
(j
mod
2)=0
then
m[i][j]:=1
else
m[i][j]:=0;
end;
在 Delphi 中开发具有管理员权限的应用程序
【中文标题】在 Delphi 中开发具有管理员权限的应用程序【英文标题】:Developing Apps with Administrator Rights in Delphi 【发布时间】:2011-08-31 18:36:19 【问题描述】:我在 Windows 7 下使用 D2010 编写一个似乎需要管理员权限的应用程序(我认为是因为它使用 COM 与第三方 .exe 通信,这也需要管理员权限)。
我已根据需要添加了清单资源,但是当我尝试从 IDE 调试应用程序时,它会报告
“无法创建进程。 请求的操作需要 海拔”
...它不会运行。如果我以管理员身份运行 Delphi,那么我的应用程序可以正常运行,但这感觉像是一种危险的蛮力方法,尤其是当我开发的大多数应用程序不需要管理员权限时。
有什么方法可以让 Delphi 在我运行我的应用程序时提示提升,而不是让整个 IDE 运行提升?
【问题讨论】:
当您需要为 that 应用程序工作时以管理员身份启动 IDE 并在处理其他应用程序时以普通用户身份启动它有什么问题?我就是这么做的! @Cosmin,谢谢。似乎这可能是最好的方法。 这是正常行为,调试器无法调试提升的被调试对象,∴必须在启动调试会话之前提升。 【参考方案1】:UAC 还会捕获名称中或许多版本资源字段中包含“设置”、“更新”或“安装”字样的任何应用程序。 (公司名称、应用名称、描述等。 它认为任何此类应用程序都是潜在的“安装程序”应用程序,因此必须以管理员权限运行。
听起来很疯狂,但这是真的。请参阅此document 中的“安装程序检测”部分。
您可以通过包含一个表明它不需要管理员权限的清单来解决此问题。
【讨论】:
欢迎来到 ***,@Phil。你真的读过这个问题吗?您的答案看起来与所问的内容无关。 我明白你的意思。我正在添加有关 UAC 的相关信息,因为有人提出了该主题。它实际上并没有回答这个问题。道歉。 不要道歉,这是一个很好的答案,对于一个非常不同的问题。所以想法是对特定问题有特定的答案,所以积累“相关的东西”并不是这里的真正目标,无论如何我们都有谷歌这样做;) 这简直太愚蠢了。我遇到了同样的问题,只是突然开始需要抬高。将名称从 Updater.exe 更改为 Yoo.exe,它开始没有任何问题。 :P【参考方案2】:没有,它也不适用于VS:
https://***.com/questions/3265787/how-do-i-debug-an-process-as-elevated-with-visual-studio-2008-sp1-on-windows-7
我想您可以运行提升的远程调试器并使用远程调试附加 IDE。
它不起作用,因为该进程正在作为另一个用户(或使用另一个用户令牌)运行。
IDE 正在尝试使用 CreateProcess 运行调试过程,但在应用程序需要 elavation 时会失败,可以在本文中找到更多详细信息:
http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx
RAD Studio 可以使用带有“runas”动词的 ShellExecute 运行应用程序,但这仍然不能解决“在其他用户上下文下调试过程”的问题。
换句话说:提升的进程只能由提升的调试器调试。
编辑:
Delphi XE2 IDE 是 32 位的,只能通过远程调试器(巧妙地对用户隐藏)来调试 64 位应用程序。
我猜想 Embarcadero 可以用类似的方式调试提升的应用程序。
【讨论】:
我不明白这个答案。当我读到它时,您说即使 IDE 运行提升,它也无法使用 requiredAdministrator 清单调试进程。我对你的理解正确吗?我认为我不能正确理解您,因为该陈述是错误的。 @David:我说过调试应用程序 可以由 IDE 提升,但是 IDE 仍然无法附加到应用程序。我编辑了相应的句子以澄清。 所以你的答案可以归结为“提升的进程只能由提升的调试器调试”?对吗? @David:没错。我已将您的陈述添加到答案中。【参考方案3】:我知道调试此类应用程序的唯一方法是以管理员身份运行 IDE。我不建议例行执行此操作,仅用于调试会话。
【讨论】:
如果可行,您还应该将应用程序拆分为两个独立的部分:一个作为正常的“AsInvoker”进程运行,另一个需要提升。然后,您应该将“UAC 屏蔽”添加到启动其他进程的按钮中,这就是 UAC 的实现方式。然后,您只需提升 IDE 即可调试“RequireAdministrator”进程。【参考方案4】:实际上,可以从具有“正常级别访问”的进程中调试具有“更高级别访问”的进程。
至少在 Windows XP 之前,将您的用户帐户添加到 Debugger Users
组就足以调试正在运行的进程,例如具有Administrator
权限。
这根本无法解决 Delphi 2010 运行进程的问题,但如果您尝试将调试器附加到已运行的进程,可能会很有用。
我认为这不适用于启用 UAC 的 Vista+,但我想我还是会提到它。 :)
确切地说,UAC 拆分令牌概念禁用了SeDebugPrivilege
:
http://blogs.msdn.com/b/greggm/archive/2006/03/30/565303.aspx
http://blogs.msdn.com/b/mithuns/archive/2006/04/04/568291.aspx
【讨论】:
【参考方案5】:以管理员身份运行 Delphi(任何版本)。
您也可以更改 Delphi 快捷方式属性(始终以管理员身份运行)。
【讨论】:
以上是关于delphi+access权限管理设置的主要内容,如果未能解决你的问题,请参考以下文章
delphi仓库管理系统,权限不知道怎么做! 给点思路。。。