2010-06-29 4 views
2

에 따라 요소를 표시하는 방법을 ... 실버 라이트는 - 나는 실버 라이트 초보자입니다 사용자 보안

나는 페이지가 현재 사용자의 보안 역할에 따라 요소 (버튼, 그리드, 이미지)을 표시합니다. 기본적으로 요소에 필요한 보안 역할을 첨부하고 요소 표시 여부를 결정하기 위해 코드를 호출하고 싶습니다. 숨겨진에 Button.visibility 설정됩니다 내 코드는 사용자가 충분한 보안 권한이없는 경우이 경우

<Button RequiredRole="Administrator" x:Name="PushBtn" Content="PushMe"/> 

(속성 RequiredRole 추가) 같은

뭔가.

나는 이런 식으로 달성하는 데 도움이되는 설명서 (어쩌면 DependentProperties 제외)에서 아무것도 찾을 수 없습니다.

어떻게이 작업을 수행 할 수 있습니까? (이것이이 문제에 대해 생각하는 것이 올바른 방법이라면 ...)

고마워.

답변

0

한 가지 방법은 단추를 명령 개체에 바인딩하는 것입니다. 명령 개체의 "CanExecute"에서 보안 검사를 수행합니다. 이것은 물론 버튼에만 적용됩니다.

아마 더 흥미로운 접근 방법은 보안을 관리하고 인덱서를 통해 보안 값을 제공하는 개체를 만드는 것입니다. 객체와 인터페이스하는 요소 가시성에 대한 비헤이비어를 만들 수 있습니다. 그런 다음 같은 것을 할 거라고 : 보안 동작은 첨부의 버튼에 걸릴 것

을, 보안 시스템을 조회하고, 사용자가 인증되지 않은 경우 가시성을 축소합니다.

+0

이 실제 값을하지 않습니다

public static class RequiredRoleSupport { public static readonly DependencyProperty RequiredRoleProperty = DependencyProperty.RegisterAttached("RequiredRole", typeof(string), typeof(RequiredRoleSupport), new PropertyMetadata(ValidateRole)); public static string GetRequiredRole(DependencyObject obj) { return (string)obj.GetValue(RequiredRoleProperty); } public static void SetRequiredRole(DependencyObject obj, string value) { obj.SetValue(RequiredRoleProperty, value); } private static void ValidateRole(object sender, DependencyPropertyChangedEventArgs e) { var control = sender as Control; var roleValue = (string)e.NewValue; // Logic to check roleValue against current user role and modify control accordingly } } 

XAML, 그는 SilverlightSpy 같은 디버거 툴을 계속 사용할 수있는 요소에 묶여? 이것은 GUI를 보호 할 때 원하는 것이 아닐 수 있습니다. –

0

주어진 폼의 모든 컨트롤을 재귀 적으로 열거하고 적절하게 표시 여부를 설정합니다. 이 논리를 보조 또는 기본 클래스에 넣을 수 있습니다.

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     foreach (var control in LayoutRoot.GetVisuals().OfType<Control>()) 
      control.Visibility = Visibility.Collapsed; 
    } 
} 

public static class ExtensionMethods 
{ 
    public static IEnumerable<DependencyObject> GetVisuals(this DependencyObject root) 
    { 
     int count = VisualTreeHelper.GetChildrenCount(root); 

     for (int i = 0; i < count; i++) 
     { 
      var child = VisualTreeHelper.GetChild(root, i); 
      yield return child; 

      foreach (var descendants in child.GetVisuals()) 
       yield return descendants; 
     } 
    } 
} 
1

사용자의 역할을 결정하고 이에 따라 표시 여부를 전환하는 논리가 있습니까? 당신이 이미 옳은 길을 걷고있는 것처럼 들립니다. attached property은 어떨까요? 속성 메타 데이터를 정의 할 때 PropertyChangedCallback을 포함 할 수 있습니다. PropertyChangedCallback 메서드는 가시성 전환을 처리 할 수 ​​있습니다.

여기에 기본적인 생각은 ...

<UserControl xmlns:roleSupport=... 

<Button roleSupport:RequiredRoleSupport.RequiredRole="Administrator" x:Name="PushBtn" Content="PushMe"/> 
+0

고마워요. 이것은 제가 생각했던 아이디어의 유형입니다.하지만 세부 사항이 부족했습니다. 나는 이것을 시도 할 것이다. – RenR