首页 新闻 会员 周边

关于使用ASP.NET MVC3 + ExtJS开发权限管理模块的问题

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-11-15 12:01

站长老大,您好!我是使用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是怎么根据权限控制页面元素的?

Mr.Jack的主页 Mr.Jack | 初学一级 | 园豆:56
提问于:2012-11-13 14:12
< >
分享
所有回答(6)
0

extjs的资料还是很多的,楼主,其实现在最应该搞懂的就是extjs的熟练使用

chenping2008 | 园豆:9836 (大侠五级) | 2012-11-13 14:13

现在我就是拿来搞后台开发。现在就是纠结于用Ext,当权限细化到界面上的每个按钮、每个元素的时侯是怎么根据当前用户所拥有的权限进行页面元素“显示与隐藏”的控制。这位兄台可有这方面的思路?

支持(0) 反对(0) Mr.Jack | 园豆:56 (初学一级) | 2012-11-13 14:18

如果说不用Ext,单纯的Html的话,用ASP.NET MVC3,我会使用MVC试图引擎自带的HtmlHelper,比如ActionLink,我重写它,让它根据当前用户的标示是否显示HTML即可。现在UI用ExtJS,界面全由JS生成,我现在就暂时想不出办法解决此问题。

支持(0) 反对(0) Mr.Jack | 园豆:56 (初学一级) | 2012-11-13 14:23
0

赋值的时候不要用this.temp1直接用temp1试试

az235 | 园豆:8483 (大侠五级) | 2012-11-13 14:22

已试,还是不行

支持(0) 反对(0) Mr.Jack | 园豆:56 (初学一级) | 2012-11-13 14:29

@小赖同学: 用alert将temp1弹出来下看看,如果是有值的话,你需要temp1=eval(temp1)下

支持(0) 反对(0) az235 | 园豆:8483 (大侠五级) | 2012-11-13 15:01
0

抓包http response回来的data.

SmartBooks | 园豆:264 (菜鸟二级) | 2012-11-13 17:45
0

1、重载System.Web.Mvc.Html中的控件(已试过,可行)

2、使用JS根据条件显示/隐藏控件(理论上可行,是否安全有待验证)

CrazyJinn | 园豆:799 (小虾三级) | 2012-11-14 09:02
0

http://fineui.com/bbs/forum.php?mod=viewthread&tid=3814&extra=

可以参考一下,权限方案做的还可以

henanluheng | 园豆:202 (菜鸟二级) | 2013-11-11 14:41
0

推荐你看看这个开源项目。

Anycmd是一个.net平台的完全开源的,完整支持RBAC的(包括核心RBAC、通用角色层次RBAC、静态职责分离RBAC和动态责任分离RBAC),将会支持xacml的通用的权限框架、中间件、解决方案。完整的RBAC规范所定义的能力只是anycmd所提供的能力集的一个子集。

权限系统干了什么?

给出一套方法,将系统中的所有功能标识出来,组织起来,托管起来,将所有的数据组织起来标识出来托管起来, 然后提供一个简单的唯一的接口,这个接口的一端是应用系统一端是权限引擎。权限引擎所回答的只是:谁是否对某资源具有实施 某个动作(运动、计算)的权限。返回的结果只有:有、没有、权限引擎异常了。

xuefly | 园豆:135 (初学一级) | 2014-10-09 14:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册