GWT应用程序中的用户角色

时间:2011-03-03 09:07:30

标签: gwt user-interface user-roles

我想知道你是否可以建议我在GWT应用程序中实现“用户角色”。我想实现一个GWT应用程序,用户登录并分配“角色”。根据他们的角色,他们将能够查看和使用不同的应用领域。

我认为这是两种可能的解决方案:

1)可能的解决方案是在onModuleLoad期间对服务器进行RPC调用。此RPC调用将生成必要的窗口小部件和/或将它们放在面板上,然后将此面板返回到客户端。

2)另一种可能的解决方案是在从服务器用户角色检索登录时进行RPC调用,并检查它们以查看用户可以做什么。

你怎么看?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

另一种方法是在JSP页面中托管您的GWT应用程序。您的JSP可能包含一段代码,如此

<script type="text/javascript">
var role = unescape("${role}");
</script>

其中$ {role}是表达式语言,它是从您从关联的servlet / controller计算并暴露给JSP的值扩展而来的。

当您的GWT应用在浏览器中运行时,该值将被填写。您的GWT应用程序可以轻松调用JS以从本机方法调用中获取此值,例如

public native String getRole() { /*-{ return $wnd.role; }-*/;

因此,您的模块可以调用getRole(),测试值并执行隐藏/显示元素的操作。

显然你的后端也应该强制执行该角色(例如,通过将其存储在会话中并在适当的时候进行测试),因为有人可以通过JS调试器运行页面,设置断点或类似值,在评估之前修改值,允许它们访问他们不应该访问的东西。

答案 1 :(得分:2)

以下情景对我有用:

  1. GWT应用程序支持安全约束。
  2. 在模块加载时,我进行RPC调用以从容器中检索角色。我将它们作为静态字段存储在主GWT模块的类中,以便其他类使用它。
  3. 每个小部件(尤其是菜单)都可以使用角色(例如,调用Main.getRoles())并根据角色构建自己。我没有在构造函数中传递角色。每个小部件都知道如何根据角色行事。
  4. 如果不仅隐藏事物而且强制执行它们至关重要,您可以在调用业务方法时使用容器安全性并检查角色和权限。

    使用GIN时,您还可以创建单例类来存储在登录期间检索到的角色,并将其注入到您需要的任何位置。