我有一个应用程序,在UI端使用Flex 3,在服务层使用java,以及BlazeDS。现在我们需要根据在数据库中为他们定义的角色授权访问系统的用户,例如:说一个角色guest的用户不应该能够访问ui上的Admin选项卡,也不应该能够做任何操作,而不是查看仪表板上显示的数据。这里还需要注意的一点是,角色可以由超级用户从UI动态创建。
我遇到了这个链接,它描述了如何执行基于角色的身份验证&授权
使用这种方法,我需要在service-config.xml中定义角色,但由于我的角色不是预定义的,所以我不能这样做。
有人遇到过类似的情况吗?
是的,我也不喜欢服务配置的想法,不要怪你。
就flex而言,您所需要担心的是定义权限,当然不是角色或用户。
良好的基于表单角色的安全性包括定义用户、角色和权限。你可能知道这一点,但无论如何,大声说出这个问题是很好的。- 用户被分配一个或多个角色
- 角色被分配一个或多个权限
- 权限安全功能
所以,在你的应用程序中,你定义了特定的权限——应用程序中依赖于安全性的部分——可见/不可见/可以或不能执行,等等。我通常是用字符串常量来做的。因此,在订单管理的情况下,我可能有CanCreateOrder
, CanViewOrder
, CanCancelOrder
, CanFlagOrder
。
在服务器端,角色将被绑定到这些权限。比如:
- Admin可以做所有
- CustomerService可以做view,并标记
- 客户可以做查看
所以在你的服务器端,用户A是一个管理员,得到一个与他们分配的角色相关联的所有权限的列表,所以服务器发回一个像这样的字符串CanCreateOrder,CanViewOrder,CanCancelOrder,CanFlagOrder
在您的应用程序中,当用户通过身份验证并获得该列表时,它将存储在某个静态全局变量中(或者您将其拆分为数组等)。
然后,在检查单个项的可见性或访问权限时,只需检查值的数组或字符串。
这为您定义的项提供了很大的灵活性,最重要的是,您基本上是硬编码的权限- 特定于它们存在的功能代码。因此,不需要调整它们
因此,如果您希望让客户服务代表能够稍后取消订单,您只需将该权限绑定到该角色。完成了。不需要更改代码,因为权限只是绑定到该功能,而不是用户,也不是角色。
我已经在许多应用程序中这样做了,这是一个可靠的设计。如果您需要将权限与其他键绑定,则情况略有不同,但无论如何,这都是一个很好的起点。
有意义吗?
**当然,您可以加密安全交换并通过SSL发送,保护该交易超出了讨论范围;)