如何基于用户角色的操纵WPF GUI(How to manipulate WPF GUI based

2019-06-23 17:15发布

我使用.NET的的IIdentity和IPrincipal的对象基于角色的安全性,我在修改基于角色的当前用户具有显示控制器的步骤。

我的问题是推荐的方法是什么使/在WPF窗口禁止领域 - 显示/隐藏依赖IIdentity.IsInRole呼叫类型的字段。

可这在XAML来完成,还是我来抽象与我所想的是在后面的代码有点乱码本;

this.txtUserName.IsReadOnly = !MyPrincipal.CurrentPrincipal.IsInRole("Administrator");
this.mnuCreateUser.Visibility = MyPrincipal.CurrentPrincipal.IsInRole("Administrator");
 ? Visibility.Hidden : Visibility.Visible;

(;执行功能时,我的代码检查的角色,我所希望做的是修改GUI依赖于角色,因此用户不会看到/看只读元素,他们没有获得注)

Answer 1:

虽然前面的答案将工作,对我来说,它看起来有点丑陋检测逻辑对象的知名度。 我会用转换为...

<Control Visibility={Binding Path=CurrentPrincipal, Converter={StaticResource RoleToVisibilityConverter}, ConverterParameter=Administrator}/>

然后转换器本身

public class RoleToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var principal = value as Principal;
        if(principal != null) {
            return principal.IsInRole((string)parameter) ? Visibility.Visible : Visibility.Collapsed;
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
         throw new NotImplementedException();
    }
}


Answer 2:

<Control Visibility={Binding ElementName=ThisWindow, Path=AdministratorVisibility, Mode=OneWay}/>

在你的C#代码:

public Visibility AdministratorVisibility
{
    get 
    { 
        MyPrincipal.CurrentPrincipal.IsInRole("Administrator") ? Visibility.Hidden : Visibility.Visible; 
    }
}

你可以做同样的事情,实现东西IsReadOnly 。 如果用户的角色可以改变(我不知道这些用户角色是如何工作的),可以实现INotifyPropertyChanged ,做NotifyPropertyChanged("AdministratorVisibility")否则你很可能改变BindingModeBindingMode.OneTime并跳过执行通知。

这可能不是比你在做什么,已经好了一大堆,但它可能不如你会得到什么。



文章来源: How to manipulate WPF GUI based on user roles