使用声明性安全性和azman保护类上的方法

时间:2011-12-08 16:03:45

标签: wcf security azman

我有一个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");
    }

}

是否可以对方法启用安全检查?

1 个答案:

答案 0 :(得分:0)

我猜测CreateNewUserx是AzMan中的一个操作或任务,而不是一个角色。 AuthorizationStoreRoleProvider仅识别AzMan角色,而PrincipalPermission仅检查IPrincipal公开的角色。但是,这是使用AzMan的一种向后方式,因为基于操作的授权机制的要点是允许角色是用户可配置的,并允许应用程序只担心操作。

我建议删除您对角色的要求,而不仅仅要求操作权限。使用这种方法,您需要更改您的权限(和属性)或您的主要实现,或两者都要知道AzMan操作。