1

WPFで次のことができるかどうかを確認しています。

ユーザーが WPF アプリケーションを開き、ユーザーの AD 名を使用して、カスタム DB でユーザーの役割を確認します。これは、asp.net メンバーシップ データベースに似たものになります。

ユーザーの役割に応じて、WPF は特定のコントロールを表示します。

たとえば、私が管理者の場合はすべてにアクセスできますが、読み取り専用ユーザーの場合はアプリケーションへのアクセスが制限されます。

次の例を使用して可視性を設定できることはわかっています。

public class RoleToVisibilityConverter : MarkupExtension,IValueConverter
{
    public RoleToVisibilityConverter()
    {

    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo                                 culture)
    {
        var principal = value as GenericPrincipal;
        bool IsValidUser = false;
        if (principal != null)
        {
            foreach (String role in parameter.ToString().Split(';'))
            {
                if (principal.IsInRole(role))
                {
                    IsValidUser = true;
                    break;
                }  
            }
            return IsValidUser ? Visibility.Visible : Visibility.Collapsed;
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}

XAML では、可視性のために次のバインディングを追加します。

Visibility="{Binding Source={x:Static systhread:Thread.CurrentPrincipal}, ConverterParameter=admin;editor;readonly, Converter={rv:RoleToVisibilityConverter}}

しかし、私がやりたいのは、これを xaml に追加する必要がないことです。

ユーザーの役割とそのすべての権限を取得し、ウィンドウに応じて UI 権限をロードできるようにしたいと考えています。

理由は、xaml を変更せずに、読み取り専用ロールが表示/実行できる内容を変更できるようにしたいからです。

これが可能かどうかは誰にもわかりますか?もしそうなら、それはベストプラクティスです.

前もって感謝します。

ノエル

4

2 に答える 2

2

異なるアクセス許可ごとに異なるビューを作成し、ナビゲーション中に適切なユーザー許可ページをターゲットにする場合を除き、「Xaml で行わない」ことは事実上不可能だと思います。

そうでなければ...あなたができる最善のことは、スタイルを作成することです. このスタイルはベース コントロールを対象とし、定義内で可視性または IsEnabled またはその両方をオン/オフするデータ トリガーを作成します。そうすれば、すべての xaml ページの 1 つの中心的な場所にスタイルを配置でき、パーミッションのフラグ設定が必要な各コントロールは、そのスタイルに従うだけでスタイルを保持できます。

そのもう 1 つの利点は、ニーズに応じてさまざまなシナリオをバインドできることです。たとえば、以下のスタイルでは、データ コンテキストにさまざまなブール値が設定されています。表示はできるが編集はできない場合があるため、IsEnabled はそのユーザーに対して false に設定されますが、管理者は両方を実行できますが、表示できないフラグが設定されたユーザーはコントロールを表示することさえできません。

<Style x:Key="PermissionStyle" TargetType="{x:Type Control}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=ViewOnly}" Value="True">
            <Setter Property="Visibility" Value="Visible" />
            <Setter Property="IsEnabled" Value="False" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsAdmin}" Value="True">
            <Setter Property="IsEnabled" Value="True" />
            <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=NotVisible}" Value="True">
            <Setter Property="IsEnabled" Value="False" />
            <Setter Property="Visibility" Value="Hidden" />
        </DataTrigger>            
    </Style.Triggers>
</Style> 
于 2013-01-10T13:16:13.260 に答える