在《原理篇》中我们谈到:如果采用自定义安全主体权限模式,我们可以通过自定义AuthorizationPolicy或者ServiceAuthorizationManager实现对基于当前认证用于相关的安全主体的提供,进而达到授权的目的。为了让大家对此有个更加深刻的认识,在这篇文章中我们会提供一个具体的例子。[源代码从这里下载]
目录:
一、创建自定义AuthorizationPolicy
二、创建自定义ServiceAuthorizationManager
三、通过自定义AuthorizationPolicy实现授权
四、通过自定义ServiceAuthorizationManager实现授权
我们先来演示通过自定义AuthorizationPolicy以提供当前安全主体的方式。我们通过自定义AuthorizationPolicy实现这样的授权策略:如果用户名为Foo(假设为管理员),我们创建一个包含“Administrators”角色的安全主体;而对于其他的用户,提供的安全主体的角色列表中仅仅包括“Guest”。我们为该自定义AuthorizationPolicy起名为SimpleAdministrators,SimpleAdministrators整个定义如下。
class SimpleAuthorizationPolicy : IAuthorizationPolicy
2: {
public SimpleAuthorizationPolicy()
4: {
this.Id = Guid.NewGuid().ToString();
6: }
object state)
8: {
string.Empty;
in evaluationContext.ClaimSets)
11: {
in claimSet.FindClaims(ClaimTypes.Name, Rights.PossessProperty))
13: {
string)claim.Resource;
15: }
16: }
17:
'\\'))
19: {
20: userName = userName.Split('\\')[1];
21: }
] = GetPrincipal(userName);
false;
24: }
25:
string userName)
27: {
new GenericIdentity(userName);
true) == 0)
30: {
});
32: }
});
34: }
35:
public ClaimSet Issuer
37: {
return ClaimSet.System; }
39: }
private set; }
41: }