C# 如何控制WPF Catel框架中两个以上角色的访问?

C# 如何控制WPF Catel框架中两个以上角色的访问?,c#,wpf,authentication,mvvm,catel,C#,Wpf,Authentication,Mvvm,Catel,例如,我有3个角色:管理员、开发人员、项目经理。 如果我想禁用除 管理员,我会写: <i:Interaction.Behaviors> <catel:Authentication AuthenticationTag="admin" Action="Collapse" /> </i:Interaction.Behaviors> 效果很好 但是,如果我想为管理员和项目经理(2个或更多角色)启用控制,并为其他用户禁用控制,我将这样写: 它不起作

例如,我有3个角色:管理员、开发人员、项目经理。 如果我想禁用除 管理员,我会写:

<i:Interaction.Behaviors>
      <catel:Authentication AuthenticationTag="admin" Action="Collapse" />
</i:Interaction.Behaviors>

效果很好

但是,如果我想为管理员和项目经理(2个或更多角色)启用控制,并为其他用户禁用控制,我将这样写:


它不起作用 请帮帮我

这是AuthenticationProvider.cs

公共类AuthenticationProvider:IAAuthenticationProvider
{
/// 
///获取或设置用户当前所在的角色。
/// 
///角色。
公共字符串角色{get;set;}
公共布尔值可执行命令(ICATELCOMAND命令,对象命令参数)
{
返回true;
}
public bool hasaccesstoielement(FrameworkElement元素、对象标记、对象身份验证标记)
{
var authenticationTagAsString=authenticationtagas字符串;
if(authenticationTagaString!=null)
{
if(string.Compare(authenticationTagaString,Role,true)=0)
{
返回true;
}
}
返回false;
}
}

也许您可以这样做:

<i:Interaction.Behaviors>
    <catel:Authentication AuthenticationTag="admin;project manager" Action="Collapse" />
</i:Interaction.Behaviors>
因此,您提供的角色可以以分号分隔的列表形式查看特定的UI元素。如果列表包含当前的
角色
,则可以访问UI元素,如果不包含,则返回false,因此隐藏UI元素

public class AuthenticationProvider : IAuthenticationProvider
{
    /// <summary>
    /// Gets or sets the role the user is currently in.
    /// </summary>
    /// <value>The role.</value>
    public string Role { get; set; }

    public bool CanCommandBeExecuted(ICatelCommand command, object commandParameter)
    {
        return true;
    }

    public bool HasAccessToUIElement(FrameworkElement element, object tag, object authenticationTag)
    {
        var authenticationTagAsString = authenticationTag as string;
        if (authenticationTagAsString != null)
        {
            if (authenticationTagAsString.Contains(Role))
            {
                return true;
            }
        }

        return false;
    }
}