用户权限管理及动态菜单的实现

      近来在做一个运营系统的开发,做完初步需求后确定同时使用B/S和C/S两种模式进行,主要是考虑到各自的优缺点,B/S主要是用于操作员和工程组这些分散的用户,C/S则来做一些管理用户。

      下面来写一下自己关于在权限管理方面的工作,有一些不足请指正。

       在设计中,主要用到了角色、用户组。但是这里的角色做的比较怪异,也是我和总设计一个争议的地方,他坚持用户的一个直接授权,而提出了角色这个概念则是在具体的授权操作中按照用户性质粗分了几类,以方便授权操作,号称虚拟角色,呵呵。我还是比较坚持用户—〉角色—〉角色授权—〉模块这种比较通用的方式。

      上面是一个功能的授权,用户组则是用来进行数据访问限制的。其中分为用于操作员组和工程组的组一,用来规定组的管辖区域,其中还牵扯到跨区域的问题。另外一个组为管理组,规定了组的管辖组一。这样就解决了数据访问域的问题。

      表达能力不佳,说的可能不明确,下面给我数据库的模型图,做的比较匆忙,省略了一些表。其中有用户表:Acount_Users; 表group1和group2主要用来进行控制数据的访问权限,在表rolePermission和表modules主要用来做一个功能权限的管理,说白了就是控制用户所能访问的菜单。而右上角则是纯为了授权方便做的一个分类。如上所说,这个设计没有用到真正的角色概念。

       

      在动态菜单实现的时候主要分为了B/S和C/S两种。

        先说B/S模式,这个超级简单,偶使用了框架和TreeView,在用户登录后把所有所允许的菜单项在TreeView里列出,每个菜单项只需要做一个链接就可以了。但是这不是全部,在每页都会调用一个类方法进行功能权限的检查。在需要的时候要做数据访问权限的验证。

        C/S模式和B/S类似,用到的是MDI容器加载各个模块的MDI子窗体的方法。在用户登录后,用的是MenuStrip控件,根据用户的授权动态的将菜单项载入,并且将每个菜单项加入一个点击事件的委托,此委托用与在点击时判断子窗体的ID,以便加载该子窗体。

        在这里只是大体叙述了自己的方法,省略掉了其中类的设计。都是自己摸索的,有些设计可能并不科学,存在一些问题,还请各位能多多指正,希望能起到抛砖引玉的效果,如果能有好的办法还请赐教。
posted on 2007-07-01 18:56  microant  阅读(4133)  评论(8编辑  收藏  举报