Silverlight - контроль видимости на основе роли пользователя - PullRequest
2 голосов
/ 15 декабря 2011

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

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

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

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

Спасибо,

Ответы [ 3 ]

2 голосов
/ 24 октября 2012

Необходимо добавить обработчик событий 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 и отключить управление.

1 голос
/ 15 декабря 2011

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

ConverterParameter='admin'

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

ConverterParameter={x:Static namespace:LoggedInUserType}
0 голосов
/ 15 декабря 2011

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

  1. создать один конвертер , чтобы выполнить всю работу по конвертации пользователянаходится в роли значения Visibility
  2. цепочка нескольких преобразователей (перейдите по ссылке в ответе), причем каждый преобразователь выполняет одну часть преобразования

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

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

...