信息系统开发平台OpenExpressApp - 使用CSLA类库实现用户管理
在《信息系统开发平台OpenExpressApp - 用户权限模块设计》中对RBAC以及在OEA中的涉及进行了简要介绍,权限的基础必须存在用户,实现自定义用户管理,CSLA已经提供一些类库来继承使用,本篇简单的讲解一下如何使用CSLA类库实现用户管理以及登录,下一篇再介绍功能权限部分。
用户管理模块
这个其实就是一个用户字典管理,包括用户名、登录名和密码,没有考虑证书等功能,由于目前实现比较简单,User类库编写按照以往类库就行了,这里就不单独讲了。
实现用户主体Principal
主体实现登录和退出功能,登录成功后返回用户,否则为非法用户。CSLA实现了一个类BusinessPrincipalBase,我们只要从它继承下来就可以很方便的实现OEA的Principal对象,这个对象在登录窗口时调用调用。
Principal代码如下:
public class OEAPrincipal : BusinessPrincipalBase
{
private OEAPrincipal(IIdentity identity)
: base(identity)
{ }
public static bool Login(string username, string password)
{
var identity = OEAIdentity.GetIdentity(username, password);
if (identity.IsAuthenticated)
{
OEAPrincipal principal = new OEAPrincipal(identity);
Csla.ApplicationContext.User = principal;
return true;
}
else
{
Csla.ApplicationContext.User = new UnauthenticatedPrincipal();
return false;
}
}
public static void Logout()
{
Csla.ApplicationContext.User = new UnauthenticatedPrincipal();
实现用户标识Identity
通过用户名和密码去服务器端查询后返回用户标识对象,在这里会把角色也返回过来,角色部分功能权限blog中再介绍。
/// <summary>
/// 注意:防止重名,User增加Code区分唯一性,查询时通过Code查询,同时返回Code和Name
/// </summary>
[Serializable()]
public class OEAIdentity : CslaIdentity
{
#region Factory Methods
internal static OEAIdentity GetIdentity(string username, string password)
{
return DataPortal.Fetch<OEAIdentity>(new UsernameCriteria(username, password));
}
public User User { get; set; }
private OEAIdentity()
{ /* require use of factory methods */ }
#endregion
#region Data Access
public new OrgPositions Roles { get; private set; }
private void DataPortal_Fetch(UsernameCriteria criteria)
{
User = UserList.Get(criteria.Username, criteria.Password);
if (null != User)
{
base.Name = User.Name;
base.IsAuthenticated = true;
this.Roles = OrgPositions.GetList(User.Id); // list of roles from security store
}
else
{
base.Name = string.Empty;
base.IsAuthenticated = false;
this.Roles = null;
}
}
#endregion
}
分类:
架构
标签:
OpenExpressApp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2009-01-07 软件观点 - 软件工厂方法