站长老大,您好!我是使用ExtJS的新手,我是做ASP.NET MVC3开发的,目前是尝试着结合ExtJS来开发后台管理。后台管理的权限管理模块是老生常谈了。由于刚开始接触ext不久,我现在就很纠结,用这个东西的话,当权限细化到界面上的每个按钮、每个元素的时侯是怎么根据当前用户所拥有的权限进行页面元素“显示与隐藏”的控制的?我自己也查了一下,但是资料很少,有的人说这样做:
直接从服务器端获得json格式的值,在客户端读取对应的值就可以了。据个例子:
通过ajax读取服务器端的权限值,返回这样的数据:
{tbar1: false, tbar2: true}
然后在extjs中:
var vResult = eval('(' + ajaxText + ')'); //得到{tbar1: false, tbar2: true}
这样就可以直接给tbar赋值了
disabled: vResult.tbar1
disabled: vResult.tbar2
然后我自己写了个简单例子:
var temp1 = "";//全局变量,我用来保存从后台读取的权限数据的,然后给Ext组件的hidden属性赋值
var temp2="ad";
//数据转换
function ConvertData(response){
// alert(response);
var result = Ext.util.JSON.decode(response.responseText);
this.temp1 = result;//在这里我把读取到的result赋值给全局变量temp1
temp2=temp1;
// alert(test);
}
//从后台地址/home/Test3获取当前用户权限,假设返回格式为{ edit = true, delete = false}
Ext.Ajax.request({
url: '/home/Test3',
timeout: 3000,
success: function (response, options) {
ConvertData(response);
},
failure: function (response, options) {
JsHelper.ShowError(response.responseText + " " + options);
}
});
//创建页面元素
function Main_Index() {
//alert(this.temp);
var btn = new Ext.Button({
text : '友情提示:菜单在左边',
handler : function() {
Ext.MessageBox.alert('提示框', '执行相关操作!');
}
});
var btn2 = new Ext.Button({
text : '权限按钮1',
handler : function() {
Ext.MessageBox.alert('提示框', '执行相关操作!');
}
});
var btn3 = new Ext.Button({
text: '权限按钮2',
height: 200,
hidden: temp1.edit,//问题是这个地方居然是undefined!!纳闷!!
handler : function() {
Ext.MessageBox.alert('提示框', '执行相关操作adadsa!');
}
});
var panel = new Ext.Panel({
title : '一个panel',
items: [btn, btn2, btn3]
});
JsHelper.ExtTabDoLayout(panel);// 注意这里把panel组件加到当前的tabpanel里
}
Main_Index();// 执行方法
我的思路是这样的,因为ext的每一个组件都有hidden属性,我先从后台获取用户的相关权限,例如result={ edit = true, delete = false},然后在每个ext组件的hidden属性里写,例如hidden : result.edit,但现在经调试发现是undefined。所以现在想问问各位
用这个Ext是怎么根据权限控制页面元素的?
extjs的资料还是很多的,楼主,其实现在最应该搞懂的就是extjs的熟练使用
现在我就是拿来搞后台开发。现在就是纠结于用Ext,当权限细化到界面上的每个按钮、每个元素的时侯是怎么根据当前用户所拥有的权限进行页面元素“显示与隐藏”的控制。这位兄台可有这方面的思路?
如果说不用Ext,单纯的Html的话,用ASP.NET MVC3,我会使用MVC试图引擎自带的HtmlHelper,比如ActionLink,我重写它,让它根据当前用户的标示是否显示HTML即可。现在UI用ExtJS,界面全由JS生成,我现在就暂时想不出办法解决此问题。
赋值的时候不要用this.temp1直接用temp1试试
已试,还是不行
@小赖同学: 用alert将temp1弹出来下看看,如果是有值的话,你需要temp1=eval(temp1)下
抓包http response回来的data.
1、重载System.Web.Mvc.Html中的控件(已试过,可行)
2、使用JS根据条件显示/隐藏控件(理论上可行,是否安全有待验证)
http://fineui.com/bbs/forum.php?mod=viewthread&tid=3814&extra=
可以参考一下,权限方案做的还可以
推荐你看看这个开源项目。
Anycmd是一个.net平台的完全开源的,完整支持RBAC的(包括核心RBAC、通用角色层次RBAC、静态职责分离RBAC和动态责任分离RBAC),将会支持xacml的通用的权限框架、中间件、解决方案。完整的RBAC规范所定义的能力只是anycmd所提供的能力集的一个子集。
权限系统干了什么?
给出一套方法,将系统中的所有功能标识出来,组织起来,托管起来,将所有的数据组织起来标识出来托管起来, 然后提供一个简单的唯一的接口,这个接口的一端是应用系统一端是权限引擎。权限引擎所回答的只是:谁是否对某资源具有实施 某个动作(运动、计算)的权限。返回的结果只有:有、没有、权限引擎异常了。