当前位置:  开发笔记 > 编程语言 > 正文

如何将Ext JS用于基于角色的应用程序

如何解决《如何将ExtJS用于基于角色的应用程序》经验,为你挑选了1个好方法。

我打算将Ext JS用于大型应用程序.应用程序的功能是基于角色的.用户登录时,只能看到与其相关的菜单和屏幕功能.我的服务器端技术将是Java和JSP.

为了解决这个问题,我有两个想法
.1.在用户使用服务器端技术登录后动态创建Ext JS相关的javascript.servlet/JSP将根据用户角色创建必要的est js代码.

2.具有在视图JSP中设置的Js变量,这些变量将用于确保用户只能使用正确的功能.

什么是确保安全性并在Ext Js应用程序中提供基于角色的UI的最佳方法.
在此先感谢您的想法..

阿卜杜勒·奥拉卡拉



1> Justin Johns..:

我必须在我当前开发的应用程序中解决类似问题,但权限基于用户所在国家/地区.

我知道你已经是,但只是为了任何人阅读的利益重申,权限应始终在服务器端实现,JavaScript安全性始终是次要的.这是因为任何半脑的人都可以使用bookmarklet或Firebug来执行任意JavaScript并绕过客户端安全性.

我发现有几种方法可以做到这一点,但有两种方法尤其是最理智的方法.无论采用哪种方法,都需要考虑两件事:1)服务器的JavaScript以及如何避免服务于不必要的逻辑; 2)如何避免执行用户无法使用的逻辑.

延迟加载和权限配置:

    我的应用程序中的所有小部件都是延迟加载的dojo.require,因此无需担心不适用于用户的不必要的JavaScript.我对ExtJs库并不是很熟悉,但就我所见,它没有提供类似的方法; 但是,同步ajax调用后跟eval是必不可少的.在任何情况下,在这种方法中,重要的是组件功能不会跨越不同的文件(同样,这通常是好的设计).每个文件都应该是自己的类,用于控制特定的窗口小部件或其他UI元素.

    然后,我在服务器生成的JavaScript配置类中设置权限.然后,可以在整个应用程序中引用此类,以了解什么是不允许的内容.

例如,以下方法控制对全局控件中可用的大多数窗口小部件的访问.

com.project.frontController.prototype.init = function(widgets) {
   var permissions = com.project.config.permissions;

   // For each widget in the controller
   for ( var i=0, l=widgets.length; i

配置看起来像:

com.project.config.permissions = {
    "widgetAbc": {
        btnAccessNode:     "#some-css-selector",
        otherWidgetConfig: "etc"
    },
    "widgetXyz": {
        btnAccessNode:     "div.some-css-selector"
    }
};

编译和功能检查:

    某些应用程序会将其所有JavaScript编译为一个文件,然后将其提供给客户端.如果您的应用程序执行此类操作,并且您可以设法动态执行此操作,则可以在服务器之前在服务器端确定所有必需的JS.当然,这会产生一些开销; 但是,您可以按角色缓存已编译的版本.如果角色很少,那么可以轻松地启动此缓存,这只是包含一个特定脚本的问题.

    由于只有允许的JavaScript可用,所以只需在尝试执行它之前检测所需的类/功能是否可用,就需要进行权限检查.

例如,您的脚本包含可能如下所示:


您的功能检查将是这样的:

com.project.frontController.prototype.init = function(widgets) {
   // For each widget in the controller
   for ( var i=0, l=widgets.length; i

要么

com.project.someWidget.prototype.launchOtherWidget = function() {
    if ( typeof otherWidget != "undefined" ) {
        (new otherWidget()).open();
    }
};

请注意,这两种方法在实现中非常相似.我想说在两者之间做出决定的最佳方法是考虑代码库的大小,可用于动态编译的工具,以及缓存这些基于角色的编译包.对于我的项目,不仅编译器在环境中不可用,而且代码库很大(1.3mb膨胀/ 296kb默认加上dojo库),这是不可接受的,因为客户端对维护低应用程序负载更感兴趣倍.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有