ExtJS和页面授权(服务器端)

时间:2012-02-24 18:23:45

标签: extjs extjs4

我正在寻找有关如何使用ExtJS 4实现安全页面的信息。安全页面我的意思是用户将使用Siteminder(SSO)登录我们的网站,因此我们将拥有用户的身份。然后,我们将通过进行数据库/ LDAP调用来确定用户将拥有哪些角色,并仅渲染用户有权访问的那些视图/组件。

我想到了几个问题:

1。)当然我希望在服务器端渲染页面之前进行授权检查,那么在解雇Ext.onReady()之前你怎么做呢?我需要让ExtJS等待服务器的响应吗?

2.。)组织页面组件的最佳方法是什么,案例可能是某人可能看到某个特定组件,而另一个人却看不到?

3.。)如何将生成的页面(即用户有权访问的部分)发送给客户端?

TIA!

4 个答案:

答案 0 :(得分:5)

如果您是在Java背景下工作并且习惯使用Spring,那么我使用Spring Security here编写了一种方法。这将允许您插入所需的任何身份验证机制。主要区别在于,我没有使用index.html来引导应用程序,而是使用JSP,以便Spring Servlet Filter将触发进行身份验证。 Ext JS应用程序将阻止,直到用户通过身份验证并提供用户的角色/权限。

答案 1 :(得分:2)

  1. 使用服务器端技术通过将JS App启动脚本放入JSP / GSP来预处理授权。这样做是迫使服务器端组件首先启动,然后将HTML / JS / CSS呈现给客户端。对于完整的RIA应用程序,请使用index.gsp(或jsp),并且您的URL保持“domain / contextroot”。

  2. 您可以通过对服务器的ajax请求来查询内容的访问权限,或者您也可以通过在返回其余客户端响应之前首先处理的JSP技术来设置JS变量。

  3.   

    < G:的javascript>

      //global env var definition 
       var env = "${System.getProperty(Environment.KEY)}";
    
    < /g:javascript>
    

    由于客户端代码可以更改,因此这两者都不是100%安全的。当提交数据进行处理时,必须在服务器端处理真正的安全强制执行。

    “3。简单的方法是隐藏/显示基于2.上面的视图等。还有一些实验通过懒惰(手动)初始化可能需要或可能不需要的控制器来模块化客户端MVC应用程序。

    希望这有帮助。

    DB :)

答案 2 :(得分:2)

我目前正在尝试以下解决方案。虽然它只适用于拥有相当简单的用户组的应用程序,但它可能对您有所帮助。

首先,使用简单的HTML / CSS页面,在没有extj的情况下完成用户身份验证。用户登录后,其详细信息(用户ID,角色)将保存到PHP会话中。然后页面重定向到两个extjs应用程序之一。

普通用户的一个应用程序(我称之为客户端),这些是客户端JS不包含任何管理功能的人。另一个应用程序是管理员。

两个应用程序的类都继承自基类。例如,我们有base.mainMenu,admin.mainMenu和clients.mainMenu都继承自base.mainMenu。 app.js脚本的唯一区别是加载的控制器,并且每个extJS 4动态加载模块,只加载相关的视图(即,在客户端看到)。在我的情况下,所有页面都会动态加载,因此我的用户只能在其主菜单中动态加载页面。

管理员应用使用包含用户角色的全局JS变量来阻止某些功能。因此,例如,一旦加载视图,就会从版主(具有较少权限的管理组)中隐藏“编辑”按钮(实际上,这实际上是通过不加载允许在视图上进行编辑的插件来完成的)。 / p>

要完全包装,对服务器的任何调用都会检查会话用户是否具有所请求操作的权限,因此无论客户端脚本如何,服务器操作只能由具有适当权限的人员执行。

总而言之,您有3种不同的策略可以混合搭配:

  • 为不同的用户加载不同的应用。如果您的类都是基类所固有的,那么这比维护2个或更多完全不同的应用程序更容易。
  • 使用全局JS变量为某些用户禁用/启用某些功能。如果您没有遇到客户端加载功能的问题,然后禁用(但仍会被调试器看到),这样做才有用。
  • 无论如何,都会根据会话变量检查所有服务器端调用。

答案 3 :(得分:1)

  1. 查看Role-based access control。我使用Yii的基于数据库的RBAC,并有一个php脚本,当ext启动时以json格式返回rbac规则

  2. 在客户端上,最好的办法是隐藏或禁用不允许的功能。

  3. 服务器上的
  4. 如果不允许用户执行某项功能,则应抛出403 http error。处理ext中的ajax异常并检查403s。