權限判斷一向蔸諟大伙儿常谈的话题啦。偶列举一下比较常见的做法吧(注意,是常见的)
数据库端最简单的可能 是会建 权限实体表、角色表、用户表,偶称其为权限基础表、以及三者之间的关联表。
当然复杂一点的有url到权限或者角色的关联表,用以管理url访问的权限控制。
或者一些其他资源与权限基础表之间的关联,总之就是做一些与具体业务挂钩的扩展啦。
茬后代代码端,多半会在某一处施加拦截器用以做权限判断吧。
例如用xwork的拦截器拦截action,通过当前用户色角色以及Action的访问url路径 再加上权限实体三者之间的映射关系来判断用户是否有访问Action的权利。
当然也有用AspectJ的方式来实现,不过原理是一样的。
在前台页面上,首先说导航菜单这一块儿。后台肯定是有一个导航菜单表跟角色关联啦,不同的角色登陆进来能看到不同的菜单。这不是问题,因为几个简单的迭代就出菜单啦。
最麻烦就是业务页面上这一块儿,按钮级的权限控制,真的是很麻烦呢。
很多人怕麻烦,直接省略掉前台按钮级的权限控制,如果你点了你不能点的按钮,就给个提示说“你不够格”。
但理论上,应该直接屏蔽掉这个按钮是最好的,但是应该怎么做呢?
硬编码,偶肯定会被人说菜菜啦。
偶目前想到的是用tag的方式。但使用范围太窄了呀。并且,一旦用了tag,前台页面就依赖于这个tag了,换句话说,以后要是决定不用tag了,还很麻烦滴。再者,在我的tag还没出来以前,人家做业务的就没法动手写页面了。因为写了以后还得改,这也是偶不想看见的。
有没有类似于AOP一样的无侵入式的方法,能够很优雅的解决视图层的权限控制的问题呢?偶想虚心学习哦
分享到:
相关推荐
对于React 16.3及以上版本,新增了两个静态方法static getDerivedStateFromProps和getSnapshotBeforeUpdate用于替代一些旧的生命周期方法。 理解React组件生命周期及其方法,对于优化组件渲染性能和管理组件状态都...
老生常谈外链 站长要做到对症下药.pps
单元测试进行曲单元测试又是老生常谈-'单元测试',说实话自己在单元测试上是'语言上的巨人,行动上的矮子',属于那种说的比做的多的人^_^。不过也不能说什么也没做。记得去年年末的时候自己还设计并实现过一个简单的...
如果事件处理器绑定了过多的事件,可能会造成性能问题,特别是在一些包含大量子元素的父元素上绑定处理器时。此外,如果事件冒泡被子元素内部的事件处理器阻止了,那么父元素上的事件监听器将不会触发。这就需要...
ProgressBar和ProgressDialog是Android开发中常见的两种进度条控件,用于展示任务执行的进度或等待状态。下面我们将深入探讨这两种控件的用法。 首先,ProgressBar是一个可以显示具体进度的组件,它可以是圆形或...
jQuery-Kwicks-Amination Kwicks 图书馆是老生常谈,但却是个好东西。 如果您想计算它生成的不同事件并制作幻灯片,这里有一些 javascript 可以帮助您。 我花了一些时间,所以可能会为您节省一些时间:) 看看它在行动
正如标题所言,《电子技术的老生常谈——接地》一文中提到的那样,尽管接地的基本概念在每一次培训和交流中都会被提及,但往往缺乏一个通用而全面的方法论指导。本文旨在深入探讨接地的各种类型、目的以及具体的实施...
当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...
在进行JavaScript编程的过程中,面向对象思想一直是一个核心的概念。面向对象编程(OOP)是通过创建对象来模拟现实世界的一种编程范式。在JavaScript中,对象可以通过不同的方法创建和定义。面向对象有三大基本特性...
总结来说,Android中的事件传递和处理机制是一个深度和广度都很大的话题,涉及到UI设计的许多细节。理解这一机制能够帮助开发者更好地控制用户交互,提高应用的用户体验。通过不断实践和学习,开发者可以熟练掌握这...
Java中的Fail-Fast机制详解 Java中的Fail-Fast机制是一种错误检测机制,当多个线程对集合进行结构上的改变操作时,有可能会产生Fail-Fast机制。这种机制是Java集合框架的一部分,可以帮助检测并发修改引发的错误。...
举个例子,我们可以定义一些权限常量: ```php define("mDELETE", 8); define("mUPLOAD", 4); define("mWRITE", 2); define("mREAD", 1); ``` 在这里,我们定义了四个权限常量,每个权限对应一个特定的二进制位。8、...
Java设计模式是在特定环境下,为了解决某类重复出现的问题而总结出来的一套成功或有效的解决方案。这些设计模式旨在提高代码的可重用性、可维护性和可扩展性。 设计模式通常包含以下几个关键要素: ...
JavaScript中的MVC(Model-View-Controller)是一种广泛应用于Web开发的架构模式,它将复杂的交互逻辑分解为三个相互协作的部分:模型、视图和控制器。 1. **模型(Model)**: 模型主要负责存储和管理应用的数据...
5. **浮动控制**:使用`.media-left`和`.media-right`类来控制媒体对象在主体中的浮动方式,分别使媒体对象向左或向右浮动,并与其他内容保持一定的间距。 在HTML结构中,`.media-right`应当放在`.media-body`的...
Log4j和Log4j2的区别 Log4j和Log4j2是两个常用的日志记录工具,它们都来自Apache开源项目。虽然它们都是日志记录工具,但是它们之间有很多区别。下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来...
在CSS世界里,`position`属性是一个至关重要的概念,它决定了元素在页面上的布局方式,因此被称为“老生常谈”的话题。`position`属性控制元素的定位模式,赋予开发者极大的灵活性来创建复杂的布局。然而,这也是一...
可以通过调整JVM的启动参数,如-Xss控制栈的大小,-Xms和-Xmx控制堆的初始大小和最大大小,来优化程序的性能。 总结来说,Java中的堆和栈各有优势和特点:堆适合存储复杂、生命周期长的对象,而栈则适用于快速存取...