在Flex中为现有应用程序实现基于角色的授权的建议

时间:2011-07-09 19:50:26

标签: java flex user-interface blazeds rbac

我有一个使用Flex 3在UI端和java @服务层以及BlazeDS编写的应用程序。现在我们需要根据在数据库中为它们定义的角色授权访问系统的用户,例如:假设具有角色guest的用户不能访问ui上的Admin选项卡,也不应该执行任何操作查看仪表板上显示的数据以外的操作。此处需要注意的是,超级用户可以从UI动态创建角色。

我遇到了此链接,其中介绍了如何执行Role Based Authentication & Authorization

使用这种方法我需要在service-config.xml中定义角色,但由于我的角色没有预先定义,所以我不能使用它。

有没有人遇到类似的情况。任何指针都会有很大的帮助。

1 个答案:

答案 0 :(得分:3)

是的,我也不喜欢service-config的想法,不要怪你。

就弹性方面而言,您需要担心的是定义权限,当然不是角色或用户。

基于良好表单角色的安全性涉及定义用户,角色和权限。你可能知道这一点,但对于这个问题,无论如何都要大声说出来。

  • 为用户分配一个或多个角色
  • 为角色分配一项或多项权限
  • 权限安全功能

因此,在您的应用程序中,您定义了特定权限 - 依赖于安全性的应用程序部分 - 可见/不可见/可以或无法执行等。我通常这样做的方式是使用字符串常量。因此,在订单管理情况下,我可能会CanCreateOrderCanViewOrderCanCancelOrderCanFlagOrder

在服务器端,角色将与这些权限相关联。让我们说:

  • 管理员可以做所有
  • CustomerService可以查看和标记
  • 客户可以查看

因此,在您的服务器端,作为管理员的用户A获取与其分配的角色相关联的所有权限的列表,因此服务器发回一个类似于此字符串的CanCreateOrder,CanViewOrder,CanCancelOrder,CanFlagOrder

在您的应用程序中,当用户通过身份验证并获取该列表时,它会在某处存储到静态全局变量中(或者将.split()存入数组等)。

然后,在检查对单个项目的可见性或访问权限时,您只需检查该数组或值的字符串。

这为您定义的项目提供了很大的灵活性,最重要的是,您基本上是硬编码的权限 - 特定于它们所存在的功能代码。因此,没有'需要调整它们。

因此,如果您希望让客户服务代表稍后取消订单,您只需将该权限与该角色相关联。完成。没有代码需要更改,因为它只是绑定到该功能的权限,而不是用户,而不是角色。

我在众多应用程序中完成了这项工作,它的设计非常扎实。如果你需要与其他键相关联的权限,这是一个稍微不同的故事,但这是一个很好的起点,无论如何。

有意义吗?

**当然,您可以加密安全交换并通过SSL发送,确保该交易超出讨论范围;)