我正在使用PRISM开发WPF应用程序,我需要实现在Shell之前加载的Login功能.
最好的方法是什么?将登录视为模块?将它与壳牌一起放在主项目中?
如果登录正确,我需要存储一些用户信息(名称,角色等),以便稍后在整个应用程序中使用它(在Shell中以及在模块中).我应该在哪里以及如何存储这些信息?
提前致谢.
本讨论描述了在shell之前显示登录表单的解决方案:http://compositewpf.codeplex.com/discussions/29570
至于如何存储用户的详细信息,您可以使用.Net GenericPrincipal和GenericIdentity类.它们允许您表示有关用户的"基本"信息,例如用户名和角色.然后可以针对当前线程存储主体/标识,因此您无需担心创建某种静态/单例类来访问详细信息.检查当前用户的角色成员资格也变得很容易.
创建对象并分配给当前线程,如下所示: -
string[] roles = { "User", "Admin" };
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity("Joe"),
roles);
Run Code Online (Sandbox Code Playgroud)
然后,只要您想访问当前登录用户的详细信息: -
public string GetUsername()
{
var principal = Thread.CurrentPrincipal;
var identity = principal == null ? null : principal.Identity;
return identity == null ? null : identity.Name;
}
public bool IsInRole(string role)
{
var principal = Thread.CurrentPrincipal;
return principal == null ? false : principal.IsInRole(role);
}
Run Code Online (Sandbox Code Playgroud)
如果GenericPrincipal并且GenericIdentity不合适,我将创建一个具有必要属性(名称,角色等)的单例类,这些属性可以传递给应用程序的其他部分,例如使用IoC容器.静态类是一种更简单的解决方案(无需传递),但静态可以使单元测试更加棘手.
| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |