.net 为数据模型设置掩码标志以防止未经授权的访问的最佳方法

.net 为数据模型设置掩码标志以防止未经授权的访问的最佳方法,.net,wpf,security,data-binding,.net,Wpf,Security,Data Binding,我试图保护一个大型对象模型的几个数据成员的安全,这样,如果用户界面启用了安全标志,那么访问它们的任何用户界面都会显示一些通用字符(例如****),而不是实际值 这是一个具有数据绑定的WPF应用程序。我知道如果设置了安全标志,我可以创建一个自定义控件或转换器来屏蔽数据,但是在显示安全数据memeber的任何地方都需要此转换器或使用我的自定义控件。我可能不知道数据成员在UI中使用的所有位置,或者将来可能忘记保护数据成员,因此我认为这不是一个很好的解决方案 我认为更好的方法是使数据成员的getter检

我试图保护一个大型对象模型的几个数据成员的安全,这样,如果用户界面启用了安全标志,那么访问它们的任何用户界面都会显示一些通用字符(例如****),而不是实际值

这是一个具有数据绑定的WPF应用程序。我知道如果设置了安全标志,我可以创建一个自定义控件或转换器来屏蔽数据,但是在显示安全数据memeber的任何地方都需要此转换器或使用我的自定义控件。我可能不知道数据成员在UI中使用的所有位置,或者将来可能忘记保护数据成员,因此我认为这不是一个很好的解决方案

我认为更好的方法是使数据成员的getter检查标志,如果设置了安全标志,则返回掩码字符。我知道哪些数据成员需要保护,这样我就可以一次性保护它们,现在和将来的所有UI开发都将得到保护。我想不出一种“干净”的方式,让UI设置一个标志,数据模型将使用该标志来影响数据成员的getter。我突然想到有一种方法可以做到这一点,但我就是不记得是怎么做到的


如果这个问题太模糊,请告诉我

这里有一个选项。在应用程序的资源库中定义类似的内容。在我的示例中,TargetType将样式应用于所有文本框类型

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApplication1"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <local:Secure x:Key="SecureFlag" />
        <Style TargetType="TextBox">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Source={StaticResource SecureFlag}, Path=Hide}" Value="True" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.Setters>
                        <Setter Property="Visibility" Value="Hidden" />
                        <Setter Property="Background" Value="Black" />
                    </MultiDataTrigger.Setters>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
   </Application.Resources>
</Application>
我的主窗口的XAML没有更改

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="25" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBox Text="333"></TextBox>
</Grid>

我尝试设置文本属性,但不幸的是,这没有起作用;但是,可能有一种方法可以让setter覆盖文本

这种方法的一个缺点是,它只是可视的。辅助功能软件将看到该值,您甚至可以复制和粘贴它。因此,这个解决方案显然需要进一步完善

已编辑-添加了第二个选项

您可以通过将触发器的setters中的template属性设置为类似以下内容来进一步修改此示例

                <MultiDataTrigger.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="TextBox">
                                <TextBlock>***</TextBlock>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </MultiDataTrigger.Setters>

***

是否可以改用样式?样式是否与转换器或自定义控件不同?当设置安全标志时,我是否仍然需要在需要屏蔽的控件上使用这种样式?我还没有尝试您想要做的事情,所以我不知道答案。我的想法是尝试将其放入一个全局资源字典中,并通过指定TargetType来应用样式。旁白:在授权问题上,我通常倾向于将默认(false)情况设置为安全情况,例如隐藏值的情况。只有授权/身份验证完成且标志设置为true时,才会显示实际值。我建议你改变主意。这种方法的问题是,在我的整个应用程序中,显示数据的文本框、标签和文本块即使不是几百个,也有几十个,到目前为止,大约有14个需要保护。这14个控件显示了我需要保护的5个数据属性。我需要去每一个具体的,并告诉它使用这种风格。我还必须告诉所有开发人员,确保在任何时候添加新控件时使用这种样式,他们认为该控件可能会显示安全的数据属性。啊,我明白你的意思。为了使我的示例起作用,您必须找到一种方法来测试绑定,查看它所指的内容,然后仅在您想要保护的对象以及设置了安全位的情况下应用controltemplate。糟糕……对不起……我试过了$
                <MultiDataTrigger.Setters>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="TextBox">
                                <TextBlock>***</TextBlock>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </MultiDataTrigger.Setters>