背景:WTM框架自带了用户管理,但是很多人使用框架需要配置很多的字段满足用户管理。
一、添加自定义用户类,继承自FrameworkUserBase。同时制定表名为FrameworkUsers。并在数据库上下文中注册。
1、XXX.Models项目中添加自定义用户类
注意:如果不指定表名,自动以的表中的用户无法正常登录。
[Table("FrameworkUsers")]
public class MyUser : FrameworkUserBase
{
[Display(Name = "附加信息1")]
public string Extra1 { get; set; }
[Display(Name = "附加信息2")]
public string Extra2 { get; set; }
}
2、XXX.DataAccess项目DataContext.cs文件中注册自定义用户类
public DataContext(CS cs)
: base(cs)
{
}
public DataContext(string cs, DBTypeEnum dbtype)
: base(cs, dbtype)
{
}
public DbSet<MyUser> MyUsers { get; set; }
二、使用代码生成器生成CURD代码,并为密码添加MD5验证
1、启动项目,用主页菜单功能生成代码。这个就不截图了,大家都会。
2、在XXX.ViewModel中,找到自定义的VM,文件夹名称和自定义类的名称基本一样,就是最后多加了个VMs,例如MyUserVMs。找到MyUserVM.cs文件找到DoAdd方法,并且在base.DoAdd();之前添加Entity.Password = Utils.GetMD5String(Entity.Password);密码验证。
public override void DoAdd()
{
Entity.UserRoles = new List<FrameworkUserRole>();
if (SelectedUserRolesIDs != null)
{
foreach (var id in SelectedUserRolesIDs)
{
Entity.UserRoles.Add(new FrameworkUserRole { RoleId = id });
}
}
Entity.UserGroups = new List<FrameworkUserGroup>();
if (SelectedUserGroupsIDs != null)
{
foreach (var id in SelectedUserGroupsIDs)
{
Entity.UserGroups.Add(new FrameworkUserGroup { GroupId = id });
}
}
//添加MD5验证
Entity.Password = Utils.GetMD5String(Entity.Password);
base.DoAdd();
}
这样的话,就初步完成了自定义用户的设置。可以自己添加几个用户试试哈。
三、测试用户登录
在web层中,修改appsettings.json文件中的。"IsQuickDebug":配置项,由false改成true。测试下用户登录和注册。
{
"ConnectionStrings": [
{
"Key": "default",
"Value": "Server=DESKTOP-ATT1EOK;Database=HiddenPerils_db;Trusted_Connection=True;"
}
],
"DBType": "SqlServer",
"IsOldSqlServer": false,
"CookiePre": "WTM",
"EnableLog": true,
"LogExceptionOnly": false,
"IsQuickDebug": true, //将false改为true
...
四、将自定义用户字段添加到注册中
在XXX.ViewModel\HomeVMs中找到 RegVM.cs文件。
1、添加自定义的用户字段。
public class RegVM : BaseVM
{
/// <summary>
/// 添加自定义字段
/// </summary>
[Display(Name = "生日")]
public DateTime Birthday { get; set; }
[Display(Name = "账号")]
[Required(AllowEmptyStrings = false)]
[StringLength(50)]
public string ITCode { get; set; }
[Display(Name = "姓名")]
[Required(AllowEmptyStrings = false)]
[StringLength(50)]
public string Name { get; set; }
[Display(Name = "密码")]
[Required(AllowEmptyStrings = false)]
[StringLength(50, ErrorMessage = "{0}最多输入{1}个字符")]
public string Password { get; set; }
[Display(Name = "确认密码")]
[Required(AllowEmptyStrings = false)]
[StringLength(50, ErrorMessage = "{0}stringmax{1}")]
public string NewPasswordComfirm { get; set; }
...
2、修改DoReg方法:将FrameworkUserBase全部修改为自定义的用户类名例如MyUser,new MyUser的时候注意给自定义字段赋值。
/// <summary>
/// 进行登录
/// </summary>
/// <returns>登录用户的信息</returns>
public bool DoReg()
{
if (Password != NewPasswordComfirm)
{
MSD.AddModelError("NewPasswordComfirm", Localizer["PasswordNotSame"]);
return false;
}
var exist = DC.Set<MyUser>().Any(x => x.ITCode.ToLower() == ITCode.ToLower());
if (exist == true)
{
MSD.AddModelError("ITCode", "账号重复");
return false;
}
MyUser user = new MyUser
{
ITCode = ITCode,
Name = Name,
Password = Utils.GetMD5String(Password),
IsValid = true,
CellPhone = CellPhone,
Email = Email,
//自定义字段赋值
Birthday = Birthday
};
DC.Set<MyUser>().Add(user);
DC.SaveChanges();
return true;
}
3、修改Reg视图,添加相应输入框。
@model HiddenPerils.ViewModel.HomeVMs.RegVM
<p style="text-align:center;margin-top:10px;font-size:16px">新用户注册</p>
<wt:form vm="@Model">
<wt:textbox field="ITCode" />
<wt:textbox field="Name" />
<wt:textbox is-password="true" field="Password" />
<wt:textbox is-password="true" field="NewPasswordComfirm" />
<wt:textbox field="Email" />
<wt:textbox field="CellPhone" />
//自定义字段
<wt:datetime field="Birthday" />
<wt:row align="AlignEnum.Center">
<wt:submitbutton size=" ButtonSizeEnum.Normal" />
</wt:row>
</wt:form>
启动项目,查看注册。对应的自定义字段完成添加。