2

我有一个校长的用户。

我知道我可以通过以下方式检查用户是否是管理员:

Thread.CurrentPrincipal.IsInRole("Administrators")

我也看到了这个:

PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand(); //under a try-catch cntext

根据我的测试,他们返回相同的结果

问题 :

  • 他们是一样的吗?
  • 如果没有,我应该什么时候使用哪个?
4

2 回答 2

3

Demand()调用抛出一个异常,如果没有被捕获,它将自动传播调用堆栈,该IsInRole()调用是一个比较测试,可用于执行一些非此即彼的代码。

它们是否相同:不,一个抛出异常,另一个返回真/假值。

我什么时候应该使用 which:Demand()如果您想在没有权限的情况下强制终止处理,请使用IsInRole(),用于执行条件处理。

于 2013-06-06T13:32:16.687 回答
1

除了 Petesh 的回答之外,PrincipalPermission 可以通过 PrincipalPermissionAttribute 以声明方式强加。

如果您喜欢类似 AOP 的验证,这可能是一个可行的选择。验证代码不会破坏您的业务逻辑,运行时会自动应用它。

[PrincipalPermission(...)]
public void Foo()
{ }
于 2013-06-06T13:55:22.840 回答