Ext JS-设计角色状态权限控制问题
extjs中,模块包含菜单,菜单对于表格数据,表格含有增加,删除,按钮,设计权限控制。
还有,表格行数据状态有审核,审批,付款,发货,要求不同角色处理不同的状态。
请问如何设计?请说下具体思路,不希望是通过按钮隐藏实现。有无办法实现
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
我个人意见可以借鉴linux的权限控制算法来解决这个问题。
具体请参考: [Java权限控制算法这个算法是模仿linux
我觉得这个算法非常的高效,且实用。
这样只需要一个整数就能确定用户具体具有什么权限,在前台该做权限控制的地方判断下然后做相应显示调整就OK了。
以下片段来源于引用原文:
------------------------------------
是Linux中的权限管理算法。
定义a^b为:a的b次方
假如,我们为每一个操作设定一个唯一的整数值,比如:
删除A---0
修改A---1
添加A---2
删除B---3
修改B---4
添加B---5
。。。
理论上可以有N个操作,这取决于你用于储存用户权限值的数据类型了。
这样,如果用户有权限:添加A---2;删除B---3;修改B---4
那用户的权限值 purview =2^2+2^3+2^4=28,也就是2的权的和了
化成二进制可以表示为11100
如果要验证用户是否有删除B的权限,就可以通过位与运算来实现。
在Java里,位与运算运算符号为&
即是:int value = purview &((int)Math.pow(2,3));
你会发现,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值!
原理:
位与运算,顾名思义就是对位进行与运算:
以上面的式子为例:purview & 2^3 也就是 28&8
将它们化成二进制有
11100
& 01000
01000 == 8(十进制) == 2^3
同理,如果要验证是否有删除A---0的权限
可以用:purview &((int)Math.pow(2,0));
即:
11100
& 00001
00000 == 0(十进制) != 2^0
这种算法的一个优点是速度快。可以同时处理N个权限,设置N种角色.
------------------------------------
这个算法在前台控制权限显示的时候非常方便。判断算法基本一致。
我觉得通过Spring security 来控制。通过个赋予不同的权限,来加载不同的数据资源。
可以实现,说说我的思路,其实不通过页面隐藏按钮,菜单等,更安全的做法无非就是后台权限的验证或者URL验证工作。
首先,Ext与服务端的校验工作都是Ext。data。Connection这个类中的方法实现的,与服务端的交互首先要被这个类中拦截的。知道了这一点剩下的就少说了,后台的权限可以用很多方法控;制,这里就不说了,不是重点,我们假定用acegi来做验证机,然后根据用户不同的授权来返回:
A。jsp-;未登录;b.jsp-无权限等等,然后在a。jsp中只是简单的输出MSG。NOLOGIN。b.jsp中输出-MSG。NOT_ACCESS.然后在复写Conection类中的handleResponse方法就可以了。
例子如下:
Ext.override(Ext.data.Connection, {
handleResponse : Ext.data.Connection.prototype.handleResponse.createInterceptor(
function(response) {
var resText=response.responseText;
if (resText.length>5) {
resText=resText.substr(0,9);
}
if (resText=='msg_nologin'){
//未登录,让该用户去登陆
window.top.location.href = topURL+"/login.jsp";
} else if (resText=='msg.NO_ACCESS'){
Ext.Msg.show({
title : '错误提示',
msg : '无权访问此功能',
buttons : Ext.Msg.OK,
icon : Ext.Msg.INFO
});
};
} else if (resText=='<!--404--'){
Ext.Msg.show({
title : '错误提示',
msg : '页面未找到',
buttons : Ext.Msg.OK,
icon : Ext.Msg.INFO
});
}
})
});
----------------------------华丽的分割线-------------------------------------
完善下前台部分的,也很简单,首先所有的页面在加载之前,要进行权限的过滤的,对于页面的按钮,可以使用json来讲过滤的结果的传递到前台,比如['add_but':true,'remove_but':flase]等,通过boolean值来判别这个按钮是否运行在页面显示
然后前台部分按照取来的json值进行初始化就可以了
var button = new Ext.Button({
hidden:flag,//这里写刚才从后台传递来的boolean值,表明是否显示
text:'submit'
}):
这些json串可以按照角色存在一张页面权限表中去控制
通过创建角色和权限表,一个角色对应不同的权限,一个用户对应不同的角色。
你这个最好是通过表设计来达到权限控制,不同角色登录加载权限放到session,然后通过自定义标签进行权限判断来生成按钮以及页面。绝对好用。
1、element bind click事件
2、ajax 请求+验证权限
至于角色、分组 这个角色类别不多的话 直接用静态数组就搞定了吧
没必要动数据库
第一种:增加,删除按钮看做一个功能点保存数据里面,审核,审批,付款,发货这几种状态看做不能功能点保存保存到数据里面,通过角色可以控制不同用户可以看不同菜单可以操作不同功能点设置数据。
第二种:通过struts2拦截器和数据库里面进行权限控制
一般权限归类为系统管理主要分为以下几部分 :
1.用户管理(增加、修改、删除、查询、修改用户权限)2.角色管理(增加、删除、修改)3.菜单管理(如果需要控制一个功能点每个菜单下都要增加功能点数据)4.操作日志管理(一些常用或公用字段可以放到数据字典里面)5.数据字典(增加、删除、修改)6.部门管理(用户涉及到部门就需要)
主要表大概有:用户基本信息表(用户名、密码、角色ID、部门ID...)、角色基本信息表(角色名...)、菜单表(菜单名、访问url、父菜单ID、级别、排序....)、功能表(功能名、菜单ID、排序、访问url...)、用户角色表(用户ID、角色ID...)、用户菜单权限表(用户ID、菜单ID...)、角色权限表(角色ID、菜单ID...)、操作日志表(操作人、操作时间、执行操作...)、部门基本信息表(部门名称...)、数据字典表(名称、排序...)
角色与权限建立一个矩阵,后台实现相当的存储。
控制的时候利用矩阵进行权限的分配。
角色与用户再进行一次分配就可以了。
可以考虑用spring security实现,用户角色权限控制,前台根据权限集合动态生成
其实我猜测提问者关注的是最后一句:“不希望是通过按钮隐藏实现”。
后台的实现其实应该没什么。
但是如果你的前端是完全用ExtJS来做,但是又不想通过隐藏来实现,我想只能通过后台根据权限,生成ExtJS代码片断,返回到前台来生成了。
我想通过权限管理应该是比较可行的方法,这样你就可以给不同的角色分配不同的权限,这也有效保护了表的数据,防止用户因操作失误而导致数据的破坏。我的设计思路是,给用户分配密码并且分配权限,打开表操作时进行登录验证,菜单模块下的按钮,用权限验证是否给予执行。表的界面不用依不同用户而改变,权限不足的用户所不能执行的操作,直接以灰色显示不给予执行就行了。