2

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

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

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

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

你有什么想法?

非常感谢您的帮助!

4

2 回答 2

4

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

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

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

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

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

因此,您的模块可以调用 getRole(),测试值并做它喜欢隐藏/显示元素的事情。

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

于 2011-03-03T10:20:01.253 回答
2

以下场景对我有用:

  1. GWT 应用程序落后于安全约束。
  2. 在模块加载时,我进行 RPC 调用以从容器中检索角色。我将它们作为静态字段存储在主 GWT 模块的类中,以方便其他类使用它。
  3. 每个小部件(尤其是菜单)都可以使用角色(例如调用 Main.getRoles())并根据角色构建自己。我不在构造函数中传递角色。每个小部件都知道如何根据角色表现。

如果不仅隐藏事物而且强制执行它们至关重要,那么您可以在调用业务方法时使用容器安全性并检查角色和权限。

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

于 2011-03-03T11:41:12.370 回答