项目开发中关于权限的实现方案简单描述(帮助以后回忆)

最近一直在研究权限,今天终于把权限搞定了以后准备自己写个商城,对以后的帮助非常大的。下面简单谈谈关于权限的实现.

  权限主要分为以下三个类:

    用户、角色、权限表

  权限主要分为三个步骤:

    1、安装(初始化数据)

      管理员:(超级管理员)一个拥有所有权限的用户,这个用户在程序安装时就要初始化,

      权限数据:这个表主要存储权限的名字和url,这个权限主要有两个作用,一个是菜单的显示,其中一级菜单没有url只是分类的作用。

    2、权限的分配:

      权限的分配主要是针对某个角色和权限建立管理,权限表和角色表是多对多的关系

    3、权限的使用:

      权限的使用,我们要做到,具有哪些权限就能让用户看到哪些权限,而且看不到的权限即使通过url访问也没有访问的权限

  具体实现如下:

    1、左侧菜单的显示:

      左侧菜单一般我们是首先用一个监听器,在程序启动时,将所有的*权限查出来放到application最大的作用域中,然后在用户登录时,从application作用域中去拿    权限数据,在菜单遍历的过程中在user类中写个判断是否具有权限的方法,然后用标签去判断,如果有就显示如果没有就不去显示,这样就可以实现菜单的显示了

      好处:我们也可以每次用户登录时去数据库中查询,这样会浪费很多的资源,因为权限的数据是我们在一开始时就初始化好的,一般菜单是不会变得,所有放到作用域    中,不仅仅效率高而且也降低资源的浪费,如果我们需要新增加新的菜单只需要重启下程序就好了

    2、右侧连接的显示:

      比如说是否具有部门删除的权限,我们可以在user里面写个根据url判断权限的方法,同上面的实现一样,首先从session中取出所有的角色,然后遍历所有的角色,内    部遍历所有角色的权限,然后和正在遍历的权限对比,如果有就显示,没有就不显示。

      如果我们使用的struts标签,我们可以重新定义下<s:a></s:a>标签的实现,首先判断是否具有权限,这样我们可以在页面层什么都不用更改即可实现权限效果。

    3、action的拦截

      前两步我们只是实现的表现层的目的,做到了用户具有什么权限就显示什么数据,但是如果用户通过url直接访问的话还是可以对数据进行操作的,那么如果实现对每次    请求的拦截呢?还是通过interceptor拦截器。

      我们首先写个检查权限的拦截器,继承abstractInterceptor,然后在struts.xml中配置下就好了。

        权限主要分为一般权限,登录权限,和登录后具有的不用管理的权限,

        一般权限:比如部门的增删改查

        登录权限:比如登录

        不用管理的权限:如果注销