http://www.dewen.io/q/4996/%E8%AE%BE%E8%AE%A1%E8%A7%92%E8%89%B2%E7%8A%B6%E6%80%81%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6%E9%97%AE%E9%A2%98
问:
extjs中,模块包含菜单,菜单对于表格数据,表格含有增加,删除,按钮,设计权限控制。
还有,表格行数据状态有审核,审批,付款,发货,要求不同角色处理不同的状态。
请问如何设计?请说下具体思路,不希望是通过按钮隐藏实现。有无办法实现
答:
可以实现,说说我的思路,其实不通过页面隐藏按钮,菜单等,更安全的做法无非就是后台权限的验证或者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值进行初始化就可以了
这些json串可以按照角色存在一张页面权限表中去控制