关于问题1:
您可以在公开的 WCF 方法上使用PrincipalPermissionAttribute :
[PrincipalPermission(SecurityAction.Demand, Role = "ProjectManagers")]
[PrincipalPermission(SecurityAction.Demand, Role = "Developers")]
[PrincipalPermission(SecurityAction.Demand, Role = "Operations")]
[PrincipalPermission(SecurityAction.Demand, Role = "Clients OU Admins")]
public string CreateUser(string strFName, string strLName, string strPassword, string strOUName)
{
return CreateADAccount(strFName, strLName, strPassword, strOUName);
}
这将仅授权属于上述四个组之一的用户执行该方法。
对于问题 2,在我的脑海中,您可以执行以下操作:
以下代码未经测试且不完整。它仅用于概念化。
public class ControlAuthenticator
{
Dictionary<string, ControlRule> ControlRules { get; set; }
public ControlAuthenticator()
{
ControlRules = new Dictionary<string, ControlRule>();
}
public bool UserCanRead(string controlName)
{
var user = MainViewModel.Current.CurrentUserPrincipal;
return ControlRules[controlName].ReadPermission.Split(Convert.ToChar(","))
.Intersect(user.GetGroups().Select(g => g.Name))
.Any();
}
}
public class ControlRule
{
public string ControlName { get; set; }
public string ReadPermission { get; set; }
public string WritePermission { get; set; }
}
这个想法是,在您的 ViewModel 上,您调用提供控件名称的 userCanRead(或我没有创建的 write)方法。你得到一个布尔值。UserCanRead 方法检查 ReadPermission 属性中是否有与当前用户所属的组相关的条目(我认为它可能是一个逗号分隔的授权组字符串)。如果有任何相关性,则返回 true。
在您的 ViewModel 上,如果为 true,则显示值(或允许编辑),否则显示不同的值,或禁止任何编辑。