在进行权限管理时,假如说系统管理员拥有超级权限,而一般用户只能对系统进行查询,而不能修改和删除,那么我在添加一般用户的时候,是不是每次都要对系统的某些项(如修改,删除)进行屏蔽呢?
如果说每次都要进行操作,那不是很麻烦?如果不用,那该怎么做呢?
请高手指教?并说出处理的方法?谢谢?

解决方案 »

  1.   

    说说我的思路(可能很笨)
    ====================================================================
    把“普通用户”所“具有的”要改变数据库的操作,比如修改,删除,更新等
    都编个标号存如数据库的一张表(table)中(高级用户可以修改此表)
    然后在用户登录的时候判断是否是“普通用户”
    如果是
    在执行某个改变数据库操作的时候
    就去table中查看这个操作是否存在
    如果存在就可以继续
    不存在就不能继续虽然比较麻烦
    重复的也很多(没个操作都要去检查table中有没有)
    所以最好写成函数来用
      

  2.   

    Create Table AppGroupAction:
      ID    GName    MName        FName         AName    IsUser
      1     管理员   mnuUser      frmPopedom    aNew      0
      2     人事部   mnuPoperDom  frmUser       aDel      0
      //   GName:用户组名;  MName:MenuItem Name;  FName: Form Name;  AName: Action Name
           IsUser: 判断是用户还是组名;
    ----------------------------------------------------------------------------------
    OnFormShow中:
      with Data.Popedom do
      begin
        Close;
        SQL.Clear;
        SQL.Text := 'Select  *  From AppGroupAction ' +
          'Where ((gName = ' + Char(39) + pstrUserGroup + Char(39) + ' and IsUser = ''0'') or (gName =' +
          Char(39) + pstrUserCode + Char(39) + ' and IsUser = ''1'')) and Upper( fName) = '+
          Char(39)+Self.Name + Char(39) ;
        //  gName 可为组名或用户名, IsUser 判断是否为用户名或组名, fName 为窗体名;
        Open;
        while not Eof do
        begin
          C := Self.FindComponent(FieldByName('aName').AsString);
          if C <> Nil then
            C.Tag := 1;   //  有权限则标志为1
          Next;
        end;