权限问题请教(100分)

  • 主题发起人 主题发起人 dancing_mouse
  • 开始时间 开始时间
D

dancing_mouse

Unregistered / Unconfirmed
GUEST, unregistred user!
本人刚学delphi不久,现碰到如下问题想请教各位高手啊,
想实现以不同的用户名进入系统时所能控制的功能的多少不同
譬如现系统有8个功能菜单,
现想实现以管理员的身份进入时能使用全部的功能
以普通用户的身份进入的时候却只能控制其中的几个功能窗口
数据库使用的是sqlsever
Userlist表中的设计
Username
Userpassword
Userpower
请指点指点,最好能详细点比如说具体用到组件和大概的程序代码
 
1、系统登录以后,初始化菜单时根据不同的权限设置不同菜单项的Enabled或Visible属性。
2、为了更加安全,用户点了某一菜单项以后,进行一下身份认证,是否有权限使用该功能。
 
设置不同的系统角色;
不同的系统角色拥有不同的权限;
同一个用户可以拥有多个系统角色;
系统功能按照角色来分配操作权限,角色权限间存在或的关系,例如一个用户实例拥有两个权限,一个可以对某一功能模块进行只读,另一个可以写,则该用户对该模块拥有写的权限;
用户登陆成功(密码验证通过)后,赋予相应的系统角色从而拥有对不同功能模块的操作权限。
 
楼上正解!定义角色
 
你们讲的我基本上都明白,我就是不知道具体怎么下手,请具体点,好么?
 
你把菜单存到一个表里(1表),然后每个菜单对应一个功能,然后再建立一个员工表(2表),然后再建一个菜单项/功能/员工编码 总表(三表),有着三个表,就可以了,然后关联就可以了,登陆员工生成菜单时只取(三表)里有他可用功能的菜单,不就解决了,
//创建动态菜单
 
procedure TmainFrm.createmenu;
var aquery1,aquery2,aquery3,aquery4:TADOQuery; //自己生成ADOQUERY控件
mymenu1,mymenu2,mymenu3,mymenu4:TMenuItem; //定义菜单级别
mysql1,mysql2,mysql3,mysql4:string;


begin

MainMenu1.Items.Clear ;

aquery1:=TADOQuery.Create(application);
aquery2:=TADOQuery.Create(application);
aquery3:=TADOQuery.Create(application);
aquery4:=TADOQuery.Create(application);

try

aquery1.Connection:=dm1.ADOConnection1; //数据库连接
aquery2.Connection:=dm1.ADOConnection1;
aquery3.Connection:=dm1.ADOConnection1;
aquery4.Connection:=dm1.ADOConnection1;
//一级菜单动态加载
mysql1:='';
mysql1:='select ccxlh,gnbh,substring(gnmch,1,len(gnmch)) as gnmch from menu where len(ccxlh)=2 order by ccxlh' ;
aquery1.Close;
aquery1.SQL.Clear;
aquery1.SQL.Add(mysql1);
aquery1.Prepared;
aquery1.Open ;

if aquery1.RecordCount<>0 then
begin
aquery1.First ;
while not aquery1.Eof do
begin
//创建一级菜单
mymenu1:=TMenuItem.Create(self);
mymenu1:=NewItem(aquery1.fields[2].value,0,false,true,MainFrm.Click,0,trim(aquery1.fields[1].value));
mainfrm.MainMenu1.Items.Add(mymenu1);
//判断是否有二级菜单,如有创建二级菜单

mysql2:='';
mysql2:='select ccxlh,gnbh,substring(gnmch,1,len(gnmch)) as gnmch from menu where len(ccxlh)=4 '+
' and substring(ccxlh,1,2)=:jibie order by ccxlh';
aquery2.Close;
aquery2.SQL.Clear ;
aquery2.SQL.Add(mysql2);
aquery2.Parameters.ParamByName('jibie').value:=aquery1.fields[0].value;
aquery2.Prepared ;
aquery2.ExecSQL ;
aquery2.Open ;
if aquery2.RecordCount <>0 then
begin
aquery2.First ;
while not aquery2.Eof do
begin
//创建二级菜单
mymenu2:=TMenuItem.Create(self);
mymenu2:=NewItem(aquery2.fields[2].value,0,false,true,MainFrm.Click,0,trim(aquery2.fields[1].value));
mymenu1.Add(mymenu2);

mysql3:='';
mysql3:='select ccxlh,gnbh,substring(gnmch,1,len(gnmch)) as gnmch from menu where len(ccxlh)=6 '+
' and substring(ccxlh,1,4)=:jb order by ccxlh';
aquery3.Close;
aquery3.SQL.Clear ;
aquery3.SQL.Add(mysql3);
aquery3.Parameters.ParamByName('jb').value:=aquery2.fields[0].value;
aquery3.Prepared ;
aquery3.ExecSQL ;
aquery3.Open ;
if aquery3.RecordCount <>0 then
begin
aquery3.First ;
while not aquery3.Eof do
begin
//创建三级菜单
mymenu3:=TMenuItem.Create(self);
mymenu3:=NewItem(aquery3.fields[2].value,0,false,true,MainFrm.Click,0,trim(aquery3.fields[1].value));
mymenu2.Add(mymenu3);

//四层循环开始
mysql4:='';
mysql4:='select ccxlh,gnbh,substring(gnmch,1,len(gnmch)) as gnmch from menu where len(ccxlh)=8 '+
' and substring(ccxlh,1,6)=:jb4 order by ccxlh';
aquery4.Close;
aquery4.SQL.Clear ;
aquery4.SQL.Add(mysql4);
aquery4.Parameters.ParamByName('jb4').value:=aquery3.fields[0].value;
aquery4.Prepared ;
aquery4.ExecSQL ;
aquery4.Open ;
if aquery4.RecordCount <>0 then
begin
aquery4.First ;
while not aquery4.Eof do
begin
//创建三级菜单
 
每次点击的时候可以select Userpower 看是否有权限,
你也可以在启动程序的是 根据Userpower 来设置菜单的enable属性
 
Userlist表中的设计
Username
Userpassword
Userpower
再加上权限字段
RIGHT1
RIGHT2
RIGHT3
RIGHT4
RIGHT5
...
 
后退
顶部