2011-12-14 2 views
2

Я пытаюсь выяснить, как показать/скрыть навигационную ссылку на основе роли пользователей. В настоящее время я тестирование, чтобы увидеть, если пользователь вошел в систему, и что прекрасно работает - вот мой код:Silverlight - Контроль видимости на основе роли пользователя

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

Однако, теперь мне нужно, чтобы изменить его, чтобы убедиться, что кнопка администратора отображается только если пользователь в роли «Админ».

У кого-нибудь есть предложение?

Благодаря,

ответ

1

Одним из вариантов является передать параметр через ConverterParameter который будет идентифицировать тип от пользователя, связанного с определением результата, возвращенный из конвертера.

ConverterParameter='admin' 

Другой вариант, чтобы избежать ограничения String, введенной ConverterParamter для хранения тип пользователя, вошедшего в через Singleton или другими статическими средствами, преобразователь может запрашивать, чтобы узнать, какой пользователь вошел в систему и в результате вернуть в результате видимость. Если вы хотите получить доступ к данным в XAML, вы можете сделать это, используя x:Static.

ConverterParameter={x:Static namespace:LoggedInUserType} 
0

Есть несколько способов сделать это, некоторые способы больше хака, чем другие:

  1. create one converter сделать всю работу преобразования, является ли пользователь в роли на видимость значение
  2. chain multiple converters (по ссылке в ответ) с каждым преобразователем делает одну часть преобразования

подход № 1 получит вас там, но в конечном счете, является плохим подходом, поскольку он приводит к множеству специализированных преобразователей, которые могут поддерживать PITA.

Подход №2 - это больше работы, но в целом лучший и более удобный подход.

2

Вам необходимо добавить обработчик событий loggedin на главной странице, например: 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 и отключить контроль.

Смежные вопросы