登录Prism WPF应用程序
本文关键字:应用程序 WPF Prism 登录 | 更新日期: 2023-09-27 17:57:49
我正在使用PRISM开发一个WPF应用程序,我需要实现在Shell之前加载的登录功能。
-
最好的方法是什么?是否将登录视为一个模块?把它和壳牌一起放在主项目中?
-
如果登录正确,我需要存储一些用户信息(名称、角色等),以便稍后在应用程序中使用(在Shell和模块中)。我应该在哪里以及如何存储这些信息?
提前谢谢。
本讨论描述了在shell之前显示登录表单的解决方案:http://compositewpf.codeplex.com/discussions/29570
至于如何存储用户的详细信息,您可以使用.Net GenericPrincipal
和GenericIdentity
类。它们允许您表示有关用户的"基本"信息,例如他们的用户名和角色。然后,主体/标识可以存储在当前线程中,因此您不必担心创建某种静态/单例类来访问详细信息。检查当前用户的角色成员资格也变得很容易。
创建对象并分配给当前线程,如下所示:-
string[] roles = { "User", "Admin" };
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity("Joe"),
roles);
然后,每当你想访问当前登录用户的详细信息时:-
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);
}
如果GenericPrincipal
和GenericIdentity
不合适,我会创建一个具有必要属性(名称、角色等)的单例类,这些属性可以传递给应用程序的其他部分,例如使用IoC容器。静态类是一个更容易的解决方案(不需要到处传递),但静态会使单元测试变得更加棘手。