Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)

来源:互联网 发布:单片机1ms延时程序 编辑:程序博客网 时间:2024/04/28 20:31

            接下来跟大家聊聊JavaWeb中权限控制,往大的方向说可以聊聊整合应用系统中的权限控制。在聊权限控制之前先跟大家聊聊RBAC。那么什么是RBAC呢?RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联的,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限。那么什么是角色呢?简单的说其实角色就是某些特定权限的集合,就像oracle数据库的角色一样,新创建session用户是没有任何权限的。如何想用该用户登录oracle数据库,访问特定的“数据库资源”(表、视图、存储过程、触发器、以及一些oracle系统权限对象等)都需要oracle RDBMS系统内置的超级管理员授予相应的权限之后,该用户才能访问特定的数据库资源。那么角色就可以理解为一定数量的权限的集合,权限的载体。

           那么我们该如何表述权限呢?那么在我理论体系中,权限可以分为很多类别,比如在应用功能模块上的动作操作,比如对业务表CRUD操作、打开某个视图(窗口)、上传文件等;应用界面(Ui)上可视化控制,比如界面上菜单显示、界面某个按钮的显示/enable控制,这些都是应用系统中权限控制领域范畴。那么我们在做应用系统的过程中就需要将你的应用中涉及的权限控制事物抽象出来,便于系统中进行逻辑判断。然后基于RBAC,让表述的权限关联我们应用的特性角色即可。简单一句话其实就是把你的应用涉及的权限控制抽象(权限的描述)关联系统中的角色即可。当然你的权限系统足够复杂,适应各种权限控制需求的话。我们可以在RBAC主线基础上扩展其他底层支持。比如角色组、用户组、权限资源扩展的子信息。

           说白了权限控制的主线大致为:“人员->用户->角色->权限->权限资源扩展".那么B/S架构应用权限资源扩展包含哪些呢?其实在上边已经说了一些。比如UI方面的有页面菜单、按钮等;功能上的有比如用户的一次action动作。这个action动作包含业务操作上所有可能,如上传、CRUD等;还有就上以上没有提到的,比如我们要控制应用的服务资源(soa)\webservice.这部分涉及分布式权限控制了;当然也可以对应用的数据库访问进行控制(也就是我们通常所说的数据访问权限)。

           下面就开始言归正传讲讲Java Web中权限控制。看了很多这方面的应用或者说平台。他们之中的权限控制感觉都不尽如人意。我曾经看过一位架构师的设计平台的权限,让我很不敢恭维。他在关于按钮级别的权限控制的设计中固然把特定的角色写死在页面中。但是我想说的是如果角色写死在页面中,当角色发生改变或者被管理员删除了。那么角色所涉及的权限控制就会失效。一点不灵活。

           其实Java web中权限控制要做的很灵活扩展也很好,确实不易!相比.net的winform的权限控制就好涉及多了!那么在Java web中权限控制中的页面按钮级别的权限控制做法最多的是使用自定义标签来进行!传统的通用的标签已经无法满足灵活的权限控制了!其实在Java web领域的页面按钮级别的权限控制需要根据应用前端技术的相应特点来进行设计。现在的管理应用系统前台大部分不是从零开始的界面设计,而是使用一些前端技术来设计管理应用系统的后台UI设计。这样给我们的按钮级别的权限控制带来便易。

            那么我们只需要权限值来设定特定UI资源的状态即可!比如按钮的可见性,启用性等。

            那么下面来讲讲jplogic的权限控制中的按钮级别的权限控制。说道按钮级别的权限,我们就可以会遇到这么一个问题,那就是我们如何描述页面上权限按钮呢!如何将页面按钮资源关联权限,如何初始化这些按钮权限如何才能更灵活?这些都是需要处理的!有的人可能会说,页面上按钮权限初始化可以同管理页面添加或者写死在系统初始化过程中的某个业务操作上。针对这样的做法我认为极不灵活。jplogic的做法就不是这样。首先每个按钮资源权限的权限记录并不是在开发过程手工在数据库里面添加对应的资源权限记录,也不是在后台的功能管理中新增每个页面按钮对应的资源权限值记录,当然也不是在某个业务“动作”中执行插入界面按钮资源权限值记录。jplogic按钮权限值记录的初始化就只需简单单击鼠标,平台自动从上下文获取每次页面访问临时存放在上文的ui资源权限记录!授权者可以通过友好的授权界面找到他想要授权的按钮资源权限。这样给将来项目的实施带来很大的便利。这样就比很多所谓快速开发平台的权限初始化过程更准确、更简单、更有效、

             下面开始说说jplogic的权限控制之按钮级别权限控制。jplogic按钮级别的权限控制基于j2ee 自定义标签技术实现。自定义标签使用可以根据平台的需要指定一些标签规范。也欢迎大伙进入群【376447127】与我交流相关RAD内容。

 首先,第一步:定义页面上按钮级别的权限资源定义。定义页面按钮权限资源首先需要方面于后期的权限资源搜索、以及授权

            首先得知道页面上按钮位置(这个位置不是所谓”物理上“的位置,及某个路径的位置,而是逻辑上位置,也就是说是这个按钮属于某一个模块,也就是应用的管理员可以在这个位置找到权限资源,然后将这个权限资源很方便授予某个角色】),如下图所示:


在管理界面上可以很方便变更某个角色对应的页面上某个权限按钮的状态,如可见性、启用性又或者是去掉按钮上的图片等。

在jplogic的做法是这样指定的,根据jplogic的规范只需要在页面上添加如下标签即可:

<JB:ComponentBase id="bomponentBase"  isJudgeSession="true" pageToFormMapping="org.jplogic.system.web.view.webform.SystemParamConfigMngForm" disableContextmenu="false" isLoadingListener="true"></JB:ComponentBase>
其中pageToFormMapping="org.jplogic.system.web.view.webform.SystemParamConfigMngForm"属性指定了该页面上所有按钮所属的模块。在这里可能大家可能会猜想,指定该属性之后,是不是每次访问该页面的时候都会想服务端请求更新或者添加页面上按钮资源权限呢?其实不是。指定该属性只是为了后期初始化页面按钮权限资源时候提供上下文支持。不会影响页面访问性能。

指定完这个属性之后,平台会自动的将页面上的按钮权限资源信息存放至平台上文中。当初始化按钮权限时候只需要从这个上文中取出相应的ui权限资源信息,然后持久化到数据库即可!这样我们就可以在管理端很方便的检索到页面的按钮权限资源了,并且很方便的吧这个权限资源授予某个角色。

第二步:页面按钮权限验证(控制)

           当我们需要对页面上按钮进行权限验证的时候只需要在页面上添加如下权限验证标签即可,当然也可以不加。不加的话就会对该区域的按钮进行权限验证(也就是我们在一些业务场景下不需要对一个公用业务按钮进行权限验证,那么这个时候我们就可以指定不需要进行权限验证的按钮权限资源),如下标签代码:

<JB:UiPermissionControl limitByToolbarId="sys_Param_Toolbar" id="uiPermissionControlId">    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="字典管理工具" imgDisabled="tool.gif" imgEnabled="tool.gif" itemId="0"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="1" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="基础参数设置" imgDisabled="sysset.gif" imgEnabled="sysset.gif" itemId="2"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="3" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="平台元数据信息" imgDisabled="wb.gif" imgEnabled="wb.gif" itemId="4"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="5" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="邮件测试" imgDisabled="mail.gif" imgEnabled="mail.gif" itemId="6"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="7" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="调整皮肤" imgDisabled="model.gif" imgEnabled="model.gif" itemId="8"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="9" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="改变参数性质" imgDisabled="execute.gif" imgEnabled="execute.gif" itemId="10"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="11" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="刷新参数" imgDisabled="refresh.gif" imgEnabled="refresh.gif" itemId="12"  optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="separator" imgDisabled="" imgEnabled=""  itemId="13" optionItems=""></JB:ToolBarCellComponent>    <JB:ToolBarCellComponent id="sys_Param_Toolbar" cellType="button" btnSelectName="注册按钮权限" imgDisabled="engine.gif" imgEnabled="engine.gif" itemId="14"  optionItems=""></JB:ToolBarCellComponent>    </JB:UiPermissionControl>
从以上中的<JB:UiPermissionControl limitByToolbarId="sys_Param_Toolbar" id="uiPermissionControlId">指定页面上按钮权限资源的权限验证。这样就可以适应页面上复杂的按钮级别权限控制需要。其中imgDisabled和imgEnabled属性指定按钮不同启用状态下的显示图片。开发者可以灵活指定。
如下是页面上按钮权限控制效果图演示:

首选用管理员用户admin给demo测试用户进行用户授权,进入角色授权管理页面授权,单击角色操作权限授权操作:(给用户授予相应的功能模块以及相应的操作权限),如下图:


然后进入单击角色Ui资源视图权限授权进入Ui资源授权界面,给相应的角色授予相应的ui资源权限即可,如下图:


给角色授予相应的权限之后,就可以将该拥有权限的角色授予相应上机用户即可,也就是角色绑定用户,如下图:


 然后用户demo用户登录系统检验授权结果,如下图:

 

以上内容只是jplogic权限控制的部分内容。谢谢大伙的关注,希望以上内容说明对你有说帮助。 

1 0