登录Prism WPF应用程序

本文关键字:应用程序 WPF Prism 登录 | 更新日期: 2023-09-27 17:57:49

我正在使用PRISM开发一个WPF应用程序,我需要实现在Shell之前加载的登录功能。

  1. 最好的方法是什么?是否将登录视为一个模块?把它和壳牌一起放在主项目中?

  2. 如果登录正确,我需要存储一些用户信息(名称、角色等),以便稍后在应用程序中使用(在Shell和模块中)。我应该在哪里以及如何存储这些信息?

提前谢谢。

登录Prism WPF应用程序

本讨论描述了在shell之前显示登录表单的解决方案:http://compositewpf.codeplex.com/discussions/29570

至于如何存储用户的详细信息,您可以使用.Net GenericPrincipalGenericIdentity类。它们允许您表示有关用户的"基本"信息,例如他们的用户名和角色。然后,主体/标识可以存储在当前线程中,因此您不必担心创建某种静态/单例类来访问详细信息。检查当前用户的角色成员资格也变得很容易。

创建对象并分配给当前线程,如下所示:-

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);
}

如果GenericPrincipalGenericIdentity不合适,我会创建一个具有必要属性(名称、角色等)的单例类,这些属性可以传递给应用程序的其他部分,例如使用IoC容器。静态类是一个更容易的解决方案(不需要到处传递),但静态会使单元测试变得更加棘手。