我有一个使用Flex 3在UI端和java @服务层以及BlazeDS编写的应用程序。现在我们需要根据在数据库中为它们定义的角色授权访问系统的用户,例如:假设具有角色guest的用户不能访问ui上的Admin选项卡,也不应该执行任何操作查看仪表板上显示的数据以外的操作。此处需要注意的是,超级用户可以从UI动态创建角色。
我遇到了此链接,其中介绍了如何执行Role Based Authentication & Authorization
使用这种方法我需要在service-config.xml中定义角色,但由于我的角色没有预先定义,所以我不能使用它。
有没有人遇到类似的情况。任何指针都会有很大的帮助。
答案 0 :(得分:3)
是的,我也不喜欢service-config的想法,不要怪你。
就弹性方面而言,您需要担心的是定义权限,当然不是角色或用户。
基于良好表单角色的安全性涉及定义用户,角色和权限。你可能知道这一点,但对于这个问题,无论如何都要大声说出来。
因此,在您的应用程序中,您定义了特定权限 - 依赖于安全性的应用程序部分 - 可见/不可见/可以或无法执行等。我通常这样做的方式是使用字符串常量。因此,在订单管理情况下,我可能会CanCreateOrder
,CanViewOrder
,CanCancelOrder
,CanFlagOrder
。
在服务器端,角色将与这些权限相关联。让我们说:
因此,在您的服务器端,作为管理员的用户A获取与其分配的角色相关联的所有权限的列表,因此服务器发回一个类似于此字符串的CanCreateOrder,CanViewOrder,CanCancelOrder,CanFlagOrder
在您的应用程序中,当用户通过身份验证并获取该列表时,它会在某处存储到静态全局变量中(或者将.split()存入数组等)。
然后,在检查对单个项目的可见性或访问权限时,您只需检查该数组或值的字符串。
这为您定义的项目提供了很大的灵活性,最重要的是,您基本上是硬编码的权限 - 特定于它们所存在的功能代码。因此,没有'需要调整它们。
因此,如果您希望让客户服务代表稍后取消订单,您只需将该权限与该角色相关联。完成。没有代码需要更改,因为它只是绑定到该功能的权限,而不是用户,而不是角色。
我在众多应用程序中完成了这项工作,它的设计非常扎实。如果你需要与其他键相关联的权限,这是一个稍微不同的故事,但这是一个很好的起点,无论如何。
有意义吗?
**当然,您可以加密安全交换并通过SSL发送,确保该交易超出讨论范围;)