做好一个系统时,如何设置权限问题,一个是管理员,可以增删改,而另一个是user
只能读不能增删改.我用的是delphi7+sql2000怎么办

解决方案 »

  1.   

    提供一个思路:
    先建几张表,比如说:一张用户信息表(包含权限ID),一张权限表(就是如管理员,普通用户之类的),一张菜单表,一张权限和菜单关系表。
    权限表和菜单表有两个字段分别为(ID,Name)。
    然后在Form的菜单中每个菜单都设一个tag值,把tag值对应到表里的菜单ID上,菜单项再关联到ActionList上(或者也可以直接设置Action的Tag)。再给个示例:
    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      for i:=0 to ComponentCount-1 do
      begin
       if Components[i] is TMenuItem then
         if pos('-' + IntToStr(Components[i].Tag) + '-', s) > 0 then
          TMenuItem(Components[i]).Visible := True;
         end;具体实现的工作留给楼主。
      

  2.   

    建用户信息表(ID,Name,权限字段),用户登录的同时判断权限値.是普通用户时,把增删改的Button的属性Visible := false;或Enabled := false;
    若是管理员、上述属性置為true...
      

  3.   

    在那数据库里新建了几个用户,一个是可以增删改的,一个是只读的
    但我不知道在DELPHI里做东西时怎么办就不知道了.
    大家能不能给点详细的说一下:)
    谢了
      

  4.   

    先建几张表,比如说:一张用户信息表(包含权限ID),一张权限表(就是如管理员,普通用户之类的),一张菜单表,一张权限和菜单关系表。
    权限表和菜单表有两个字段分别为(ID,Name)。
    然后在Form的菜单中每个菜单都设一个tag值,把tag值对应到表里的菜单ID上,菜单项再关联到ActionList上(或者也可以直接设置Action的Tag)。再给个示例:
    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      for i:=0 to ComponentCount-1 do
      begin
       if Components[i] is TMenuItem then
         if pos('-' + IntToStr(Components[i].Tag) + '-', s) > 0 then
          TMenuItem(Components[i]).Visible := True;
         end;
      

  5.   

    建议楼主采用juliens(星星球)的思想,当然不必要是全部。因为按照其他楼友的做法,特别是一些看起来非常容易实现的方法,其实为日后的维护和扩展留下了巨大隐患。
    比如,有些楼友说到“在数据库存管理员的表中,加一个权限字段,用户登陆时,就判断有没有权限就可以了”,那是因为你现在所要求的功能听起来很简单,这样的做法当然是很最快的,但是如果以后“角色类型”与“用户类型”的数量增加了呢?也就是,有些用户只可以读,而有些可以读也可以增加等等,有些菜单这个用户可以使用,而其他的用户就不能。那样的话,权限字段就没有权限表和菜单表结合来得好。
    总之,在复杂度并不是很高的情况下,应该考虑采用扩展性比较好的办法。
    当然,如果楼主并没有定制用户权限的想法,系统本身对此也无要求,楼主可以使用权限字段的简单方法。
      

  6.   

    wangchong1982  问得好  这个问题也是困扰我好久拉
    看来我们需要交流交流  我是hongke212阿^_^^_^
      

  7.   

    可以在表里设置不同的组,通过登陆时的组别 确定不同FORM可用与不可用就可以解决了
      

  8.   

    建立一个权限表 
      用户ID、操作1、操作2、....、操作n,这样可把权限分到具体的模块
      

  9.   

    本人初学Delphi,也遇到这样的问题,基本思路也是建立一个表,但是取出的权限是不是得放在一个全局变量中?当进行一些操作时,直接判断该变量的值就可以控制?
      

  10.   

    同意建立权限表。
    我一般是用一个整型或长整型的数的各位代表权限(或者一个数组也行,不过存储起来麻烦)。
    然后在进行操作时调用
    checkuser(i:integer):boolean;
    (i为操作号)来判断权限
      

  11.   

    一张用户信息表(包含权限ID),一张权限表(就是如管理员,普通用户之类的),一张菜单表,一张权限和菜单关系表。补充一句,用这个方法实在可以生成功能很强大的权限管理体系,其实数据库管理系统的权限管理体系也是以此为基础建立的。
    楼主甚至可以采用授权的方式对用户进行权限定制,比方说有10中不同的权限或角色,就可以泛化出2^10-1种不同的用户,权限最低的就叫guest,最高的叫admin,哈哈,和数据库管理系统实现的功能一样。
      

  12.   

    我今天花了一整天写了这东西,我是在用户表中设置了ID,NAME和权限,设置一个全局变量,用户是管理员,设为1,普通用户设为0,(有其他级别可以设为其他数字)要设置权限的菜单和BUTTON使用前都进行判断,是1就允许操作,是0就禁止,
    按照这样的做法有多级别权限时还可以,不过只有两个级别的话很麻烦,可以在普通用户登陆时就把不允许用的都Enable := false;