我有一个wcf 4.0服务,我在IIS Express中本地运行它并使用azman来管理安全性。我能够使用声明性语法来保护服务,并防止类库中的类实例化。但是,当我在类中装饰一个方法时,它没有任何效果。
[PrincipalPermission(SecurityAction.Demand, Role = "AdminRole")] //THIS WORKS
public class MaintainUser
{
[PrincipalPermission(SecurityAction.Demand, Role = "CreateNewUserx")] //THIS DOES NOT WORK
public void CreateNewUser()
{
if (ViterraSecurity.VerifyAccess.HasOperation("CreateNewUserx", ViterraSecurity.VerifyAccess.BasisOperations.CreatUser))
{
return;
}
throw new AccessViolationException("CreateNewUser");
}
}
是否可以对方法启用安全检查?
答案 0 :(得分:0)
我猜测CreateNewUserx是AzMan中的一个操作或任务,而不是一个角色。 AuthorizationStoreRoleProvider
仅识别AzMan角色,而PrincipalPermission仅检查IPrincipal公开的角色。但是,这是使用AzMan的一种向后方式,因为基于操作的授权机制的要点是允许角色是用户可配置的,并允许应用程序只担心操作。
我建议删除您对角色的要求,而不仅仅要求操作权限。使用这种方法,您需要更改您的权限(和属性)或您的主要实现,或两者都要知道AzMan操作。