加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 登录Prism WPF应用程序

发布时间:2020-12-16 02:01:11 所属栏目:百科 来源:网络整理
导读:我正在使用PRISM开发 WPF应用程序,我需要实现在 Shell之前加载的Login功能. 最好的方法是什么?将登录视为模块?将它与壳牌一起放在主项目中? 如果登录正确,我需要存储一些用户信息(名称,角色等),以便稍后在整个应用程序中使用它(在Shell中以及在模块中).我
我正在使用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);

然后,只要您想访问当前登录用户的详细信息: –

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容器.静态类是一种更简单的解决方案(无需传递),但静态可以使单元测试更加棘手.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读