其他要求都做完了,就要发布了,然而,客户要求象速达3000xp一样的,给出个权限界面,对所有的数据增,删,改,查都用check来选定,我没做过,被卡住了,又不能对客户说咱们不懂,那位高手能给出思路,当然因为很急,有source demo最好了,
请大力支持.
信箱:[email protected]
解决方案 »
- 求cxDBPivotGrid的导出excel方法.
- 两个表的数据生成树型结构的sql语句该怎么写呢?
- 请问这样一个query1 的sql 语句怎么样写????
- 晕!大家帮忙看看我取服务器时间,并设置为客户端时间的代码有什么问题啊?
- 最简单问题,在线等,解决就送
- 关于2000操作系统普通用户不能操作注册表的问题
- 在pas文件中,我如何移动选中的文本
- 画圆:我画了一个圆,可是圆周却是那么的凹凸不平,这是怎么回事?
- 急,在线100相送。在delphi中的SQL语句中如何处理日期型变量?
- 50分相送求windows浏览器工具栏图标放在那个DLL中(不是SHELL32。DLL)
- 截获Listview的滚动条事件
- 很多单选框的处理问题(在线等)
我们是这样的 可以为任意一个用户指定菜单级别的权限 如果具有权限的 则放到数据库中
然后 读取 凡是有的则invisible = true 否则 fasle。。
我觉得只是在数据库增加一个表的问题
就是在数据库中得自己定义一个所有需要操作权限的表,存储form和button,menu等的tag值,
写一个函数把用户的权限传进来,判断哪些不能访问
为什么大家不用呢?
业务逻辑都用TAction写好 然后根据权限决定TAction是否禁用
这样,每个操作员对每个菜单都可有不同的操作权限。
再做一个界面来控件这些字段的真假值,这样就可以用checkbox控件来实现了。
其实就是把主界面上的所有的事件都写到action然后每个action的事件有tag的属性
再把菜单的事件直接指定为action的事件 然后每个操作员有一个字段来存放拥有的权限的tag值 最后在登陆界面的时候根据用户拥有的tag值来确定哪个action是可以用的enable
其实还是需要借助一个表来存放所有的tag和对应的权限的名称来给用户分配权限
不知道我说得你明白了没有
1。T_Popedom
-----------------------------------------
ID Popedom_Name Popedom_Caption
1 MnuCut 剪切
2 MnuCopy 复制2。T_Group
------------------------------------------------------
ID Name ParentID ParentName Type
001 系统管理员 0 0 Group
002 系统主管 001 系统管理员 Group
003 张三 001 系统管理员 Staffer
004 李司 002 系统主管 Staffer3。T_PopedomMap
----------------------------------------------------------
ID GroupID PopedomID PopedomName OperType
001 001 1 剪切 1***Enable=False
002 001 2 复制 0***Visible=False
其中T_Popedom表中的ID是组件的Tag的值
我没开DELPHI,随手写的,所以下面的代码也不知会不会有语法错误,只是个思路而已,我也没去验证过
以下代码是各控件的有效性(也就是权限)控制代码,放在窗体FORMSHOW事件中
//先在数据库中建一个权限分配表,表结构大致是窗体名(form_name),窗体的标题(form_name_cn),各控件的有效性值(qx)
var i:integer;
s:string;
with adoquery1 do
begin
close;
sql.text:='select * from t_quanxian where form_name='+quotedstr(self.name);
open;
s:=fieldbyname('qx').asstring;//form_name为权限表中的窗体名字段,qx为该窗体对应的各控件的权限设置值
end;for i:=0 to self.componentcount-1 do
begin
if (self.components[i].classtype=tbutton) or (self.components[i].classtype=tmenuitem) then
begin
try
(self.components[i] as tbutton).enabled:=strtobool(copy(s,i,1));
except
(self.components[i] as tmenuitem).enabled:=strtobool(copy(s,i,1));
end;
end;
end;
权限设置代码同理