【问题标题】:User role aware UI用户角色感知 UI
【发布时间】:2013-07-18 04:55:48
【问题描述】:

我正在设计一个基于 Soa 原则的系统。对于身份验证,将使用传统的令牌方法。 但是需要根据访问功能的用户的角色,在消费者应用程序内激活或停用按钮和标签的位置进行授权。

这些应用程序正在 wpf (prism) 上开发。

是否有已知且经过验证的方法来处理此问题?

我们应该设计我们的自定义机制吗?

谢谢!

【问题讨论】:

    标签: prism soa user-permissions user-roles


    【解决方案1】:

    几个答案:

    是否有一种已知且行之有效的方法来处理这个问题?

    是的,有几种方法。您正在寻找的是所谓的外部授权(这是一个原则)。不同的框架和语言有不同的实现方式,例如Spring Security / Spring EL(在 Java Spring 世界中)或 .NET 世界中的 MS Claims。有技术解决方案,也有标准(例如 RBAC、ABAC、XACML...) ABAC,基于属性的访问控制模型将允许您在称为策略决策点 (PDP) 的中心位置定义授权,然后通过策略执行点 (PEP) 将您的不同应用程序和层连接到 PDP。这意味着您可以将相同的授权规则应用于表示层 (WPF) 和其他层(例如,带有 WCF 的服务层......)

    我们应该设计我们的自定义机制吗?

    否 :-) 重用已经存在的内容并尽可能使用标准。出于好奇,您是重新发明了一种用于身份验证的令牌类型,还是使用标准类型,例如SAML 还是 Kerberos?

    免责声明:我为 XACML 供应商 Axiomatics 工作。

    我不知道有任何开源 .NET XACML 实现,但 Axiomatics 确实提供了您可能感兴趣的商业解决方案。

    【讨论】:

      【解决方案2】:

      WPF Prism 不处理授权(根据this)。因此,您需要自己构建解决方案。

      我建议查看基于声明的授权(Managing Claims and Authorization with the Identity Model 可以为您提供高级视图)。您可以使用的声明示例包括:“UserCanSaveCustomerSettings”、“UserHasCustomerManagementPrivelege”。

      为您的应用程序配置声明后,您可以使用此信息来启用/禁用控件。我可以建议你两个选择。

      1. 如果您使用 MVVM 模式,您可以将访问信息(例如,您可以从 ClaimsPrincipalPermission.CheckAccess 获取)公开为 ViewModel 的属性,并将此属性直接绑定到控件。就像是

      2. 或者,您也可以实现 IValueConverter,然后通过 ClaimsPrincipalPermission.CheckAccess 或直接通过 ClaimsAuthorizationManager.CheckAccess 再次访问声明。

      此外,您可能需要考虑到您的安全性不应基于启用/禁用控件。例如,在 WPF 中有许多工具(例如Snoop)可以轻松启用/取消隐藏/单击任何控件。您可能还想检查您的应用程序/服务层中的访问权限(您也可以使用基于声明的授权,检查ClaimsPrincipalPermissionAttribute)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多