以前做的系统中都是针对某一个功能项来设计的权限,一个功能项比如说 就对应了一个窗体。直接让功能项不可用或不可显示就行.
现在功能项的窗体上的工具栏中的功能(添加,修改,删除,审核,打印,导出)等功能,也需要做上权限,大家都是怎么处理的. 也就是即使窗体显示了,但不同的用户的权限不一样,哪些工具栏按钮就可用或者不可用。

解决方案 »

  1.   

    一般来说:
    1.角色表
    2.权限表
    3.角色权限中间表
    在进行登陆或FormShow事件时,要根据当前用户的角色对角色权限中间表进行过滤,获取有权限的Action,并根据在权限表中记录的权限名称与相关控件名通过RTTI进行对控件的操作(一般默认所有控件Enable=False,有权限的可将其设置为True)
      

  2.   

    说下我的思路先将 添加,修改,删除,审核,打印,导出 等权限编号,存入数据库 比如 添加 权限编号为1等等然后将 添加,修改,删除,审核,打印,导出 功能的 执行代码都用action来实现,然后将数据库中对应的权限编号值赋给对应的action的tag属性登陆时,读取用户对应的所有权限的编号,执行action时比对该action的tag是否在用户以有的权限编号列表中.PS 不用在每个action执行时都比对该action的tag属性值是否在用户的权限编号列表中,而是在 TApplicationEvents 的OnActionExecute事件里写比对代码贴上我的代码 仅供参考
    procedure TMainFrm.MainAppEventsActionExecute(Action: TBasicAction;
      var Handled: Boolean);//权限控制
    begin
      if (AppMainOp.GetAllRightID.IndexOf(IntToStr(Action.Tag)) = -1) //GetAllRightID得到用户所有权限编号列表
        and (Action.Tag <> 0)
      then
      begin
        MessageBox(Application.Handle,'对不起,您无权进行此操作!',
          APP_Name,MB_OK + MB_ICONEXCLAMATION);
        Handled := True;
        MainAppEvents.CancelDispatch;//停止分发这个Action到其他的Action Handler
      end;
    end;
      

  3.   

    这个问题经常遇到 一般就是在表里分个栏位 ,加个标示,然后在from的fromshow里判断该用户有没有这个标示,通过按钮visible来控制。
      

  4.   

    把所有涉及到权限定义在一张表里,然后在Form onshow的时候去判断一个,没有权限就把那个菜单Enable掉