![]() |
1
1
这在一定程度上取决于您在服务中所要求的内容。 如果您的服务需要相同的声明集,我建议您提供一个只检查声明的服务,并提前调用它。这将允许您“预授权”用户,从而启用/禁用UI的适当部分。当需要呼叫您的实际服务时,用户可以随意呼叫它们,并且您已经检查了它的安全性。 如果所有服务都需要不同的声明集,并且没有简单的方法来验证它们是否可以提前工作,那么我只允许用户调用它们,并通过正常的异常处理来处理。不过,这会让生活变得更加艰难,因为你必须让用户尝试(失败),然后禁用它。 否则,您可以做一些类似于您建议的事情——放入某种形式的目录,您可以查询特定用户。除了只传递一个地址/方法,允许您只传递一个地址,并检索整个允许(或不允许,以较小的为准)方法集可能更好。这样您就可以减少仅用于身份验证的往返行程。 |
![]() |
2
1
我采用的一种方法是对索赔集进行检查,以保护服务背后的方法。我使用属性来用类型、资源和正确的属性值来修饰方法。然后,检查类具有一个请求方法,如果调用方的claimset不包含具有这些属性值的声明,则该方法将引发异常。因此,在执行任何方法代码之前,首先调用索赔检验需求。如果该方法在请求之后仍在执行,则调用方是好的。inspection类中还有一个bool函数来回答相同的问题(调用方是否有适当的声明),而不引发异常。 然后,我打包检查类,以便它与客户机一起部署,并且,只要客户机也可以获取调用方的索赔集(我通过服务上的get claimset方法提供),那么它就具有进行域模型所做的相同评估所需的一切。然后,我在视图模型中使用ICommand属性的canExecute方法中的claim inspection类的bool方法来启用/禁用控件,并基本上通过不让用户做他们没有声明的事情来防止用户获得授权异常。 至于客户机如何知道什么方法需要什么声明,我想我应该让客户机开发人员知道。一般来说,在我的项目中,这不是一个大问题,因为这些方法是非常经典的CRUD。因此,如果方法是添加一个苹果,那么所需的声明从直觉上来说就是type=apple,right=add。 不确定这是否有助于您的情况,但它在我做过的一些项目上工作得很好。 |
![]() |
Xsayar · 如何将两个命令绑定到WPF按钮? 6 年前 |
![]() |
Mark Denom · 我的数据绑定是如何写出长度属性的? 6 年前 |
![]() |
Dev · 如何更新绑定到UI的集合? 6 年前 |
![]() |
Detlef D Soost · 多重绑定未设置值 6 年前 |
![]() |
Jack Guo · 在MVVM中清除集合视图的正确方法 6 年前 |