我试图弄清楚如何根据用户角色显示/隐藏导航链接。目前我正在测试用户是否已登录,并且效果很好 - 这是我的代码:
<HyperlinkButton x:Name="AdminLinkButton" Visibility="{Binding User.IsAuthenticated, Source={StaticResource WebContext}, TargetNullValue=false, Converter={StaticResource VisibilityConverter}}" Style="{StaticResource LinkStyle}" NavigateUri="/Admin" TargetName="ContentFrame" Content="{Binding Path=Strings.AdminPageTitle, Source={StaticResource ApplicationResources}}"/>
但是,现在我需要对其进行更改以确保只有在用户处于“管理员”角色时才会显示“管理”按钮。
有人有建议吗?
谢谢,
答案 0 :(得分:2)
您需要在主页中添加loggedin eventhandler,如下所示: Authentication.LoggedIn + = LoggedIn_Event;
在LoggedIn_Event
方法中,检查用户是否具有所需角色:
private void LoggedIn_Event(object sender, AuthenticationEventArgs e){
if (e.User.IsInRole("Required Role")){
AdminLinkButton.Visibility = System.Windows.Visiblity.Visible;
}
else
{
AdminLinkButton.Visibility = System.Windows.Visiblity.Collapsed;
}
}
请记住处理LoggedOut_Event
并禁用控件。
答案 1 :(得分:1)
一个选项是通过ConverterParameter传递参数,该参数将识别与确定从转换器返回的结果相关联的用户的类型。
ConverterParameter='admin'
避免ConverterParamter
强加的字符串限制的另一个选项是存储通过Singleton登录的用户类型或转换器可以查询的其他静态方法,以便知道用户登录了什么,从而返回得到的可见性如果您必须访问XAML中的数据,则可以使用x:Static
。
ConverterParameter={x:Static namespace:LoggedInUserType}
答案 2 :(得分:0)
有几种方法可以做到这一点,有些方法比其他方式更多:
方法#1会让你到达那里,但最终是一个糟糕的方法,因为它导致了许多专门的转换器,可以维持PITA。
方法#2是更多的工作,但整体上是一种更好,更易于维护的方法。