【问题标题】:Silverlight - Control Visibility Based On User RoleSilverlight - 基于用户角色控制可见性
【发布时间】:2012-01-20 16:28:23
【问题描述】:

我试图弄清楚如何根据用户角色显示/隐藏导航链接。目前我正在测试用户是否已登录,并且效果很好 - 这是我的代码:

<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}}"/>

但是,现在我需要对其进行更改,以确保仅当用户处于“管理员”角色时才能看到“管理员”按钮。

有人有建议吗?

谢谢,

【问题讨论】:

    标签: silverlight authentication roles


    【解决方案1】:

    您需要在主页中添加登录事件处理程序,如下所示: 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 并禁用控件。

    【讨论】:

      【解决方案2】:

      一种选择是通过ConverterParameter 传递一个参数,该参数将识别与确定从转换器返回的结果相关联的用户的类型

      ConverterParameter='admin'
      

      避免ConverterParamter 施加的字符串限制的另一个选项是存储通过单例或其他静态方式登录的用户类型,转换器可以查询以了解登录的用户,从而返回结果可见性.如果您必须访问 XAML 中的数据,您可以使用 x:Static

      ConverterParameter={x:Static namespace:LoggedInUserType}
      

      【讨论】:

        【解决方案3】:

        有几种方法可以做到这一点,有些方法比其他方法更像是一种破解:

        1. create one converter 完成将用户是否在角色中转换为可见性值的整个工作
        2. chain multiple converters(点击答案中的链接)每个转换器都进行一部分转换

        方法 #1 可以帮助您实现目标,但最终是一种糟糕的方法,因为它会导致过多的专用转换器,而这些转换器可能是需要维护的 PITA。

        方法 #2 工作量更大,但总体而言是一种更好且更易于维护的方法。

        【讨论】:

          猜你喜欢
          • 2014-08-06
          • 2015-07-22
          • 2011-07-13
          • 1970-01-01
          • 2011-12-20
          • 1970-01-01
          • 2010-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多