我正在寻找有关如何使用ExtJS 4实现安全页面的信息。安全页面我的意思是用户将使用Siteminder(SSO)登录我们的网站,因此我们将拥有用户的身份。然后,我们将通过进行数据库/ LDAP调用来确定用户将拥有哪些角色,并仅渲染用户有权访问的那些视图/组件。
我想到了几个问题:
1。)当然我希望在服务器端渲染页面之前进行授权检查,那么在解雇Ext.onReady()之前你怎么做呢?我需要让ExtJS等待服务器的响应吗?
2.。)组织页面组件的最佳方法是什么,案例可能是某人可能看到某个特定组件,而另一个人却看不到?
3.。)如何将生成的页面(即用户有权访问的部分)发送给客户端?
TIA!
答案 0 :(得分:5)
如果您是在Java背景下工作并且习惯使用Spring,那么我使用Spring Security here编写了一种方法。这将允许您插入所需的任何身份验证机制。主要区别在于,我没有使用index.html
来引导应用程序,而是使用JSP,以便Spring Servlet Filter将触发进行身份验证。 Ext JS应用程序将阻止,直到用户通过身份验证并提供用户的角色/权限。
答案 1 :(得分:2)
使用服务器端技术通过将JS App启动脚本放入JSP / GSP来预处理授权。这样做是迫使服务器端组件首先启动,然后将HTML / JS / CSS呈现给客户端。对于完整的RIA应用程序,请使用index.gsp(或jsp),并且您的URL保持“domain / contextroot”。
您可以通过对服务器的ajax请求来查询内容的访问权限,或者您也可以通过在返回其余客户端响应之前首先处理的JSP技术来设置JS变量。
< 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种不同的策略可以混合搭配:
答案 3 :(得分:1)
查看Role-based access control。我使用Yii的基于数据库的RBAC,并有一个php脚本,当ext启动时以json格式返回rbac规则
在客户端上,最好的办法是隐藏或禁用不允许的功能。
如果不允许用户执行某项功能,则应抛出403 http error。处理ext中的ajax异常并检查403s。