我有一位有Principal的用户。
我知道我可以通过以下方式检查用户是否为管理员:
Thread.CurrentPrincipal.IsInRole("Administrators")
我也看到了这个:
PrincipalPermission principalPerm = new PrincipalPermission(null, "Administrators");
principalPerm.Demand(); //under a try-catch cntext
从我的测试中他们返回相同的结果
问题:
答案 0 :(得分:3)
Demand()
调用抛出一个异常,如果没有捕获则会自动传播调用堆栈,IsInRole()
调用是一个比较测试,可以用来执行某些或者代码。
它们是否相同:不,一个抛出异常,另一个返回true / false值。
我何时应该使用哪个:如果您想要强制终止处理,请使用Demand()
如果您没有该权限,请使用IsInRole()
执行条件处理。
答案 1 :(得分:1)
除Petesh回答外,还可以使用PrincipalPermissionAttribute以声明方式强制执行PrincipalPermission。
如果您喜欢类似AOP的验证,这可能是一个可行的选择。验证代码不会破坏您的业务逻辑,运行时会自动应用它。
[PrincipalPermission(...)]
public void Foo()
{ }