IPrincipal.IsInRole VS PrincipalPermission.Demand?

时间:2013-06-06 12:39:34

标签: c# .net security authentication

我有一位有Principal的用户。

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

Thread.CurrentPrincipal.IsInRole("Administrators")

我也看到了这个:

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

从我的测试中他们返回相同的结果

问题:

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

2 个答案:

答案 0 :(得分:3)

Demand()调用抛出一个异常,如果没有捕获则会自动传播调用堆栈,IsInRole()调用是一个比较测试,可以用来执行某些或者代码。

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

我何时应该使用哪个:如果您想要强制终止处理,请使用Demand()如果您没有该权限,请使用IsInRole()执行条件处理。

答案 1 :(得分:1)

除Petesh回答外,还可以使用PrincipalPermissionAttribute以声明方式强制执行PrincipalPermission。

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

[PrincipalPermission(...)]
public void Foo()
{ }