.net 为数据模型设置掩码标志以防止未经授权的访问的最佳方法
我试图保护一个大型对象模型的几个数据成员的安全,这样,如果用户界面启用了安全标志,那么访问它们的任何用户界面都会显示一些通用字符(例如****),而不是实际值 这是一个具有数据绑定的WPF应用程序。我知道如果设置了安全标志,我可以创建一个自定义控件或转换器来屏蔽数据,但是在显示安全数据memeber的任何地方都需要此转换器或使用我的自定义控件。我可能不知道数据成员在UI中使用的所有位置,或者将来可能忘记保护数据成员,因此我认为这不是一个很好的解决方案 我认为更好的方法是使数据成员的getter检查标志,如果设置了安全标志,则返回掩码字符。我知道哪些数据成员需要保护,这样我就可以一次性保护它们,现在和将来的所有UI开发都将得到保护。我想不出一种“干净”的方式,让UI设置一个标志,数据模型将使用该标志来影响数据成员的getter。我突然想到有一种方法可以做到这一点,但我就是不记得是怎么做到的.net 为数据模型设置掩码标志以防止未经授权的访问的最佳方法,.net,wpf,security,data-binding,.net,Wpf,Security,Data Binding,我试图保护一个大型对象模型的几个数据成员的安全,这样,如果用户界面启用了安全标志,那么访问它们的任何用户界面都会显示一些通用字符(例如****),而不是实际值 这是一个具有数据绑定的WPF应用程序。我知道如果设置了安全标志,我可以创建一个自定义控件或转换器来屏蔽数据,但是在显示安全数据memeber的任何地方都需要此转换器或使用我的自定义控件。我可能不知道数据成员在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>