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

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

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

    用户、角色、权限表

  权限主要分为三个步骤:

    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中配置下就好了。

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

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

        登录权限:比如登录

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

      

时间: 2024-10-16 04:11:16

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

android权限--android开发中的权限及含义(上)

android权限--android开发中的权限及含义(上) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.pe

项目开发中常用的PHP函数

日期操作 为了便于存储.比较和传递,我们通常需要使用strtotime()函数将日期转换成UNIX时间戳,只有在显示给用户看的时候才使用date()函数将日期转换成常用的时间格式. strtotime()  函数将任何英文文本的日期时间描述解析为 Unix 时间戳 eg: <?php echo(strtotime("now")); echo(strtotime("3 October 2005")); echo(strtotime("+5 hours&

逆向思维在项目开发中真的很重要

最近一直和我的小组开发一个投资类型的网站,网站的整体已经完成得差不多了,客户今天突然提出了一个要求,希望能够在所有人退出当前聊天大厅后,后面进入的人不能够看到之前用户的聊天记录(原来是可以看到的).由于聊天室代码是别人写的,且基本算木有注释,也木有相关的文档.研究源码太耗时间了,由于聊天数据比较小,聊天室窗口是从messages表中读取的数据,所以打算当用户退出时,执行某一机制将Ajax_chat_messages表中对应聊天室的数据copy到一个新的Chat_messages表中,同时清除Aj

在复杂的项目开发中使用结对编程

在复杂的项目开发中使用结对编程 卢占辉译 在开发软件项目时,不仅写出相应功能的模块很重要:确保写出的模块的易维护性(bug 修复,代码重构)也同样重要. 主打互联网技术和门户网站的Perpetuum 手机公司曾开展了一个长期的软件项目,以研制出一套基于web的内容管理软件.Perpetuum公司的许多开发者都参与了这个项目.项目中大部分复杂的模块都是完全靠个人开发的(非多人协作完成).维护这些模块(即非多人协作完成的模块)非常困难.因为开发某一模块的人还需要开发新的模块或者维护另一既有模块,这需

SSH项目开发中,将jsp页面放在WEB-INF的原因解析

 在一些安全型要求比较高的项目开发中,我们经常看到jsp页面都被放在WEB-INF下面了.这是出于对安全性的考虑, 是为了代码的安全.这样实现起来虽然麻烦了点,而且页面跳转很不方便.但是整个项目的安全性就提高上去了!所 以还是建议在一些安全性要求比较高的项目里使用这种做法! 这是我写的一个例子,我就是将所有的JSP页面都放在WEB-INF下面,然后按照模块进行分配,course文件夹就是放和 课程信息管理相关的JSP页面.假如我们输入https://localhost:8080/项目名称/p

项目开发中db设计

项目开发中db设计 0.根据原型分析出数据的由来和数据间的关系(实体关系); 1.提取字段,通过powerDesigner设计表; 2.先不加约束,先只建立数据上的单向关联,有需要时在建立双向关联或中间表;3.也可以先建立外键关系,最后删除外键关系;(方便查看表的关系);4.对实体对象通常会补充的字段:     id         主键    entity        关联实体/自己    isDelete varchar(1)  Null    #是否删除    CreateEmpId v

项目开发中对设计模式的思考

前言: 做项目的时候经常会这样的体会:我的代码实现需求了,代码重用性也可以.由于前期需求分析不彻底,只考虑到一种情况,做出来的东西给用户测试的时候,发现又需要改动,这个时候又会觉得前期的设计太过复杂,改动也比较麻烦.当然问题的根本原因是需求分析不彻底,或者对业务敏感度不够.面向对象的封装特性的核心是封装变化点,由于没有察觉到业务变化点,也就无法封装变化点.基于这个问题,我总结的方法是(1)多考虑用户的潜在需求 (2)无法感知用户潜在需求的情况下,代码设计尽量简单,不要做过多设计和封装,在重构的时

项目开发中自定义字段设计原则

在开发系统过程中,做到自定义字段策略设置,目前这种功能是很多系统的标准配置,这样子可以简化后续增加字段的难度,并对自定义字段做管理. 自定义字段功能要注意到以下几点: 1.批量规划好要自定义字段的数据表.2.对自定义字段存放的表字典表做设计3.对自定义字段做不同的属性设计4.自定义字段的扩展设计 1.明确是哪个表需要自定义字段.如果是开发一套易用的系统,做开发的时候对用到的主表做统一的自定义字段设计.这样子方便在以后的开发应用中直接操作自定义功能就能增加字段.很多程序员在初写程序的时候,增加字段

应用开发中数据字典项设计实现方案

应用开发中数据字典项设计实现方案 在 应用开发中,总会遇到许多数据字典项,比如对象状态.对象类型等等,这些项一般都是固定的若干可选值选项,比如对象状态可能有新建.修改.删除等状态,这 些数据字典项一旦定义完毕改动的频率非常低:在应用开发中,为了处理方便,一般要对这些数据字典项值选项进行数字编码(例如: 0表示新建,1表示修改,2表示删除等),以方便应用程序中使用.而UI显示对象信息时不能显示对象状态等的编码,对于编码值设计人员知道代表什么意思,但用户就不明白了,所以需要进行编码转换,从编码转换为