gpt4 book ai didi

篇(16)-Asp.NetCore入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二)

转载 作者:我是一只小鸟 更新时间:2022-11-20 20:54:35 26 4
gpt4 key购买 nike

入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二) 。

(1).在用户管理着模块中,相比较菜单功能的代码还是比较多的,设计到用户的创建,修改,角色变更和密码重置,同时都集中在列表页中.

上图中,原来的角色名显示的是一个RoleId,也要通过ViewModel的应用,显示成对应的中文名称.

(2).在ViewModel模型的建立上,我建了多个,为了满足不同的需要,其实后期用AutoMapper会简单些,但是为了理解和演练ViewModel的特点,就多写几遍,熟悉后掌握。如下图 。

在Models文件夹中,我将用户Manager归到了新建的Managers下,便于管理,分别建立了:

ChangePassView.cs 修改密码时用 。

EditManagerView.cs 编辑用户时用(编辑用户不需改密码) 。

Manager.cs 默认 。

PageManager.cs 列表分页时用 。

RegisterManagerView.cs 新建(注册)用户时用 。

(3).比如我在Index.cshtml中的视图代码中 。

在Create.cshtml中的代码 。

所以,要注意相关页面model指令所引用的Model对象名师不一样的.

(4).我在各个ViewModel模型中,代码如下 。

(4.1)重置密码模型 。

                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             重置密码模型

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            class
                          
                          
                             ChangePassView
{

                          
                          
                            public
                          
                          
                            int
                          
                           Id { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             就密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            旧密码不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength: 
                          
                          
                            18
                          
                          , MinimumLength = 
                          
                            6
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            密码长度必须在6和18之间
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckOldPass
                          
                          
                            "
                          
                          , controller: 
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            旧密码输入不正确
                          
                          
                            "
                          
                          ,AdditionalFields = 
                          
                            "
                          
                          
                            Id
                          
                          
                            "
                          
                          )] 
                          
                            //
                          
                          
                            Manager控制器内的CheckUserName 这个Action必须返回Json格式的True或False
                          
                          
                            public
                          
                          
                            string
                          
                           OldPass { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            //
                          
                          
                            remote中,增加AdditionalFields = "Id",这个Id的值可以连同OldPass一起被传到后台的,也就是说,我们的唯一性是可以通过多参数来保证的,这样就解决了上面的问题。

                          
                          
                            //
                          
                          
                            同时,我们发现[Remote("CheckOldPass", "Manager", ErrorMessage = "旧密码输入不正确!",AdditionalFields = "Id,TestId")] 多个参数
                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             新密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            新密码不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength: 
                          
                          
                            18
                          
                          , MinimumLength = 
                          
                            6
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            密码的长度在6和18之间
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           NewPass { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             确认新密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            新确认密码不能为空
                          
                          
                            "
                          
                          
                            )]
[Compare(
                          
                          
                            "
                          
                          
                            NewPass
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            两次密码输入不一致
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           ConfirmNewPass { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          ; }
                        

  。

(4.2)新建用户模型 。

                          
                            /// 
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             新建用户模型

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            class
                          
                          
                             RegisterManagerView
{

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             用户名

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            用户名不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength:
                          
                          
                            36
                          
                          , MinimumLength = 
                          
                            3
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            长度必须在3和36之间
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckUserName
                          
                          
                            "
                          
                          , controller:
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          ,ErrorMessage=
                          
                            "
                          
                          
                            用户名已经注册过
                          
                          
                            "
                          
                          )] 
                          
                            //
                          
                          
                            Manager控制器内的CheckUserName 这个Action必须返回Json格式的True或False
                          
                          
                            public
                          
                          
                            string
                          
                           UserName { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            密码不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength:
                          
                          
                            18
                          
                          , MinimumLength = 
                          
                            6
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            密码的长度在6和18之间
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           Password { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             确认密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            确认密码不能为空
                          
                          
                            "
                          
                          
                            )]
[Compare(
                          
                          
                            "
                          
                          
                            Password
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            两次密码输入不一致
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           ConfirmPassword { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             手机号码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            手机号不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength:
                          
                          
                            16
                          
                          ,MinimumLength = 
                          
                            8
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            长度必须在8和11之间
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckMobile
                          
                          
                            "
                          
                          , controller: 
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            手机号已经注册过
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           Mobile { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             邮箱地址

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            邮箱不能为空
                          
                          
                            "
                          
                          
                            )]
[RegularExpression(
                          
                          
                            @"
                          
                          
                            ^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            请输入正确的邮箱
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckEmail
                          
                          
                            "
                          
                          , controller: 
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            邮箱已经注册过
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           Email { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             备注

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            string
                          
                           Remark { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }
}
                          
                        

  。

(4.3)编辑用户模型 。

                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             编辑用户模型

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            class
                          
                          
                             EditManagerView
{

                          
                          
                            public
                          
                          
                            int
                          
                           Id { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             用户名

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            用户名不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength: 
                          
                          
                            36
                          
                          , MinimumLength = 
                          
                            3
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            长度必须在3和36之间
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckUserName
                          
                          
                            "
                          
                          , controller: 
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            用户名已经注册过
                          
                          
                            "
                          
                          )] 
                          
                            //
                          
                          
                            Manager控制器内的CheckUserName 这个Action必须返回Json格式的True或False
                          
                          
                            public
                          
                          
                            string
                          
                           UserName { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             手机号码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            手机号不能为空
                          
                          
                            "
                          
                          
                            )]
[StringLength(maximumLength: 
                          
                          
                            16
                          
                          , MinimumLength = 
                          
                            8
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            长度必须在8和11之间
                          
                          
                            "
                          
                          
                            )]
[Remote(action: 
                          
                          
                            "
                          
                          
                            CheckMobile
                          
                          
                            "
                          
                          , controller: 
                          
                            "
                          
                          
                            Manager
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            手机号已经注册过
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           Mobile { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             邮箱地址

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            
[Required(ErrorMessage 
                          
                          = 
                          
                            "
                          
                          
                            邮箱不能为空
                          
                          
                            "
                          
                          
                            )]
[RegularExpression(
                          
                          
                            @"
                          
                          
                            ^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$
                          
                          
                            "
                          
                          , ErrorMessage = 
                          
                            "
                          
                          
                            请输入正确的邮箱
                          
                          
                            "
                          
                          
                            )]

                          
                          
                            public
                          
                          
                            string
                          
                           Email { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }

                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             备注

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            string
                          
                           Remark { 
                          
                            get
                          
                          ; 
                          
                            set
                          
                          
                            ; }
}
                          
                        

  。

(4.4)列表分页模型 。

                          
                             public 
                             class 
                             PageManager { 
                             public 
                             int 
                             Id { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             int 
                             RoleId { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             string 
                             UserName { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             string 
                             Mobile { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             string 
                             Email { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             DateTime AddTime { 
                             get 
                            ; 
                             set 
                             ; } 
                             public 
                             string 
                             RoleName { 
                             get 
                            ; 
                             set 
                             ; } } 
                          
                        

(4.5)修改角色模型 。

                          
                             public 
                             class 
                             ChangeUserRole { 
                             // 
                             实际为UserId 
                             [Required] 
                             public 
                             int 
                             Id { 
                             get 
                            ; 
                             set 
                             ; } [Required] 
                             public 
                             int 
                             RoleId { 
                             get 
                            ; 
                             set 
                             ; } } 
                          
                        

(5).模型的验证属性(Remote).

在新建用户和编辑用户等模型类中的各个字段声明上,加了验证属性,例如新建用户中的:

其中验证用户名是否重复的功能,使用了远程验证remote属性; 。

在使用remote属性后,需要在对应的视图页面,引入对应的js代码,如下图所示 。

这存在一个问题,如果我要修改密码时,要顺便验证一下旧密码,这个逻辑就比单纯验证一下用户名重复要多个条件,单纯的验证用户或者邮箱是否重复,是从整个表中查询,所以,我在Controller中只需要一个参数,但是,验证旧密码是否正确,是需要验证修改的这个用户Id的旧密码,要多个用户Id,那么属性写法就变成这样的:

并且,我在对应的Controller中的验证函数增加了2个参数:

注意划线部分.

(1).两个return的逻辑正好是相反的,注意区分.

(2).不返回Json格式的True或False,也可以直接返回错误声明。注意下图是旧写法,需要修正一下(下图函数内容来自网络).

(6).在修改用户角色的功能中,使用了下拉框并通过数据库填充,在篇(9)中,讲的有如何使用下拉框,自出又用了一遍。在整个ManagerController.cs中对应的ChangeRole Action中也做的有注释,注意即可.

(7).在列表页的Index这个Action中,修改了单表获取的Linq语句,使用了2个表关联的写法.

其中 PageManager,这个ViewModel是你创建的与页面正好匹配的模型数据,它的字段属性正好对应列表页中的几个列。而要创建出这个正合适的ViewModel,是需要你通过Linq多表关联查询出需要的字段组合起来的,所以代码中用了一个select new PageMangaer{}. 。

(8).本章节的ViewModel使用很多,在新建,编辑,重置密码,改选角色和分页的功能中,都有用到。仔细阅读器在Controller中的代码,在Create,Edit,ChangePass的Action中都有对应的对象转换的代码,代码行有注释。我再简单贴出ManagerService功能代码,一个接口一个实现.

                          
                            public
                          
                          
                            class
                          
                          
                             ManagerService : IManagerService
{

                          
                          
                            private
                          
                          
                            readonly
                          
                          
                             AppDbContext _appDbContext;

                          
                          
                            public
                          
                          
                             ManagerService(AppDbContext appDbContext) {
_appDbContext 
                          
                          =
                          
                             appDbContext;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          >
                          
                             AddManagerAsync(Manager manager)
{
manager.IsDelete 
                          
                          = 
                          
                            false
                          
                          
                            ;
manager.IsLock 
                          
                          = 
                          
                            false
                          
                          
                            ;
manager.AddTime 
                          
                          =
                          
                             DateTime.Now;
manager.AddManagerId 
                          
                          = 
                          
                            1
                          
                          ;
                          
                            //
                          
                          
                            临时为1
                          
                          
                            
manager.RoleId 
                          
                          = 
                          
                            8
                          
                          ;
                          
                            //
                          
                          
                            非空字段临时设为0
                          
                          
                            await
                          
                          
                             _appDbContext.Manager.AddAsync(manager);

                          
                          
                            var
                          
                           result = 
                          
                            await
                          
                          
                             _appDbContext.SaveChangesAsync();

                          
                          
                            return
                          
                           result == 
                          
                            1
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > DeleteManagerAsync(
                          
                            int
                          
                          
                             id)
{

                          
                          
                            var
                          
                           manager = 
                          
                            await
                          
                           _appDbContext.Manager.FirstOrDefaultAsync(x => x.Id ==
                          
                             id);

                          
                          
                            if
                          
                           (manager != 
                          
                            null
                          
                          
                            )
{
_appDbContext.Manager.Remove(manager);
}


                          
                          
                            var
                          
                           result = 
                          
                            await
                          
                          
                             _appDbContext.SaveChangesAsync();

                          
                          
                            return
                          
                           result == 
                          
                            1
                          
                          ; 
                          
                            //
                          
                          
                            注意(result==1 如果等式成立,则返回true,说明删除成功)
                          
                          
                            
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<Manager> FindManagerAsync(
                          
                            int
                          
                          
                             uId)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x => x.Id ==
                          
                             uId).FirstOrDefaultAsync();

                          
                          
                            return
                          
                          
                             item;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<Manager> FindManagerAsync(
                          
                            string
                          
                           uName, 
                          
                            string
                          
                          
                             uPass)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x => x.UserName==uName && x.Password==
                          
                            uPass).FirstOrDefaultAsync();

                          
                          
                            return
                          
                          
                             item;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<Manager[]>
                          
                             GetManagerAsync()
{

                          
                          
                            var
                          
                           items = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x=>x.IsDelete == 
                          
                            false
                          
                          
                            ).ToArrayAsync();

                          
                          
                            return
                          
                          
                             items;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > UpdateManagerAysnc(
                          
                            int
                          
                          
                             id, Manager manager)
{

                          
                          
                            var
                          
                           oldManager = 
                          
                            await
                          
                           FindManagerAsync(id); 
                          
                            //
                          
                          
                            找出旧对象

                          
                          
                            //
                          
                          
                            将新值赋到旧对象上
                          
                          
                            
oldManager.UserName 
                          
                          =
                          
                             manager.UserName;
oldManager.Email 
                          
                          =
                          
                             manager.Email;
oldManager.Mobile 
                          
                          =
                          
                             manager.Mobile;
oldManager.Remark 
                          
                          =
                          
                             manager.Remark;
oldManager.ModifyManagerId 
                          
                          = 
                          
                            11
                          
                          ;
                          
                            //
                          
                          
                            
oldManager.ModifyTime 
                          
                          = DateTime.Parse(DateTime.Now.ToString(
                          
                            "
                          
                          
                            yyyy-MM-dd HH:mm:ss
                          
                          
                            "
                          
                          
                            ));

                          
                          
                            //
                          
                          
                            对旧对象执行更新
                          
                          
                            
_appDbContext.Entry(oldManager).State 
                          
                          =
                          
                             EntityState.Modified;

                          
                          
                            var
                          
                           result = 
                          
                            await
                          
                          
                             _appDbContext.SaveChangesAsync();

                          
                          
                            return
                          
                           result == 
                          
                            1
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > ChangePass(
                          
                            int
                          
                          
                             id,ChangePassView cpinfo)
{

                          
                          
                            var
                          
                           oldManager = 
                          
                            await
                          
                          
                             FindManagerAsync(id);

                          
                          
                            //
                          
                          
                            将修改后的密码复 赋值到旧对象上
                          
                          
                            
oldManager.Password 
                          
                          = AESEncryptHelper.Encode(cpinfo.NewPass.Trim(), RjWebKeys.AesEncryptKeys); 
                          
                            //
                          
                          
                            对密码加密;cpinfo.NewPass;
                          
                          
                            //
                          
                          
                            加密密码

                          
                          
                            //
                          
                          
                            对旧对象进行更新
                          
                          
                            
_appDbContext.Entry(oldManager).State 
                          
                          =
                          
                             EntityState.Modified;

                          
                          
                            var
                          
                           result = 
                          
                            await
                          
                          
                             _appDbContext.SaveChangesAsync();

                          
                          
                            return
                          
                           result == 
                          
                            1
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > ChangeRole(
                          
                            int
                          
                          
                             id, ChangeUserRole userRole)
{

                          
                          
                            var
                          
                           oldManager = 
                          
                            await
                          
                          
                             FindManagerAsync(id);

                          
                          
                            //
                          
                          
                            将修改后的密码复 赋值到旧对象上
                          
                          
                            
oldManager.RoleId 
                          
                          = userRole.RoleId;
                          
                            //
                          
                          
                            新选择的RoleId

                          
                          
                            //
                          
                          
                            对旧对象进行更新
                          
                          
                            
_appDbContext.Entry(oldManager).State 
                          
                          =
                          
                             EntityState.Modified;

                          
                          
                            var
                          
                           result = 
                          
                            await
                          
                          
                             _appDbContext.SaveChangesAsync();

                          
                          
                            return
                          
                           result == 
                          
                            1
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > CheckUserName(
                          
                            string
                          
                          
                             uName)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x => x.UserName ==
                          
                             uName).FirstOrDefaultAsync();

                          
                          
                            if
                          
                           (item != 
                          
                            null
                          
                          
                            )

                          
                          
                            return
                          
                          
                            true
                          
                          
                            ;

                          
                          
                            else
                          
                          
                            return
                          
                          
                            false
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > CheckMobile(
                          
                            string
                          
                          
                             mobile)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x => x.Mobile ==
                          
                             mobile).FirstOrDefaultAsync();

                          
                          
                            if
                          
                           (item != 
                          
                            null
                          
                          
                            )

                          
                          
                            return
                          
                          
                            true
                          
                          
                            ;

                          
                          
                            else
                          
                          
                            return
                          
                          
                            false
                          
                          
                            ;
}


                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > CheckEmail(
                          
                            string
                          
                          
                             email)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x => x.Email ==
                          
                             email).FirstOrDefaultAsync();

                          
                          
                            if
                          
                           (item != 
                          
                            null
                          
                          
                            )

                          
                          
                            return
                          
                          
                            true
                          
                          
                            ;

                          
                          
                            else
                          
                          
                            return
                          
                          
                            false
                          
                          
                            ;
}


                          
                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             验证旧密码

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            ///
                          
                          
                            <param name="oldpass"></param>
                          
                          
                            ///
                          
                          
                            <returns></returns>
                          
                          
                            public
                          
                          
                            async
                          
                           Task<
                          
                            bool
                          
                          > CheckOldPass(
                          
                            int
                          
                           id,
                          
                            string
                          
                          
                             oldpass)
{

                          
                          
                            var
                          
                           item = 
                          
                            await
                          
                           _appDbContext.Manager.Where(x=>x.Id==id && x.Password ==
                          
                             oldpass).FirstOrDefaultAsync();

                          
                          
                            if
                          
                           (item != 
                          
                            null
                          
                          
                            )

                          
                          
                            return
                          
                          
                            true
                          
                          
                            ;

                          
                          
                            else
                          
                          
                            return
                          
                          
                            false
                          
                          
                            ;
}
}
                          
                        

  。

(9).关于用户密码处理的类,从网上扒拉的,没详细研究其算法,可以用。但所有权属于网友,我贴出来,大家可以引用.

                          
                            ///
                          
                          
                            <summary>
                          
                          
                            ///
                          
                          
                             AES加解密帮助类

                          
                          
                            ///
                          
                          
                            </summary>
                          
                          
                            public
                          
                          
                            class
                          
                          
                             AESEncryptHelper
{

                          
                          
                            //
                          
                          
                            默认密钥向量
                          
                          
                            private
                          
                          
                            static
                          
                          
                            byte
                          
                          [] Keys = { 
                          
                            0x41
                          
                          , 
                          
                            0x72
                          
                          , 
                          
                            0x65
                          
                          , 
                          
                            0x79
                          
                          , 
                          
                            0x6F
                          
                          , 
                          
                            0x75
                          
                          , 
                          
                            0x6D
                          
                          , 
                          
                            0x79
                          
                          , 
                          
                            0x53
                          
                          , 
                          
                            0x6E
                          
                          , 
                          
                            0x6F
                          
                          , 
                          
                            0x77
                          
                          , 
                          
                            0x6D
                          
                          , 
                          
                            0x61
                          
                          , 
                          
                            0x6E
                          
                          , 
                          
                            0x3F
                          
                          
                             };

                          
                          
                            #region
                          
                           ========加密========

                          
                            public
                          
                          
                            static
                          
                          
                            string
                          
                           Encode(
                          
                            string
                          
                           encryptString, 
                          
                            string
                          
                          
                             encryptKey)
{
encryptKey 
                          
                          = GetSubString(encryptKey, 
                          
                            0
                          
                          , 
                          
                            32
                          
                          , 
                          
                            ""
                          
                          
                            );
encryptKey 
                          
                          = encryptKey.PadRight(
                          
                            32
                          
                          , 
                          
                            '
                          
                          
                            '
                          
                          
                            );
RijndaelManaged rijndaelProvider 
                          
                          = 
                          
                            new
                          
                          
                             RijndaelManaged();
rijndaelProvider.Key 
                          
                          = Encoding.UTF8.GetBytes(encryptKey.Substring(
                          
                            0
                          
                          , 
                          
                            32
                          
                          
                            ));
rijndaelProvider.IV 
                          
                          =
                          
                             Keys;
ICryptoTransform rijndaelEncrypt 
                          
                          =
                          
                             rijndaelProvider.CreateEncryptor();

                          
                          
                            byte
                          
                          [] inputData =
                          
                             Encoding.UTF8.GetBytes(encryptString);

                          
                          
                            byte
                          
                          [] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 
                          
                            0
                          
                          
                            , inputData.Length);

                          
                          
                            return
                          
                          
                             Convert.ToBase64String(encryptedData);
}

                          
                          
                            #endregion
                          
                          
                            #region
                          
                           ========解密========


                          
                            public
                          
                          
                            static
                          
                          
                            string
                          
                           Decode(
                          
                            string
                          
                           decryptString, 
                          
                            string
                          
                          
                             decryptKey)
{

                          
                          
                            try
                          
                          
                            
{
decryptKey 
                          
                          = GetSubString(decryptKey, 
                          
                            0
                          
                          , 
                          
                            32
                          
                          , 
                          
                            ""
                          
                          
                            );
decryptKey 
                          
                          = decryptKey.PadRight(
                          
                            32
                          
                          , 
                          
                            '
                          
                          
                            '
                          
                          
                            );
RijndaelManaged rijndaelProvider 
                          
                          = 
                          
                            new
                          
                          
                             RijndaelManaged();
rijndaelProvider.Key 
                          
                          =
                          
                             Encoding.UTF8.GetBytes(decryptKey);
rijndaelProvider.IV 
                          
                          =
                          
                             Keys;
ICryptoTransform rijndaelDecrypt 
                          
                          =
                          
                             rijndaelProvider.CreateDecryptor();

                          
                          
                            byte
                          
                          [] inputData =
                          
                             Convert.FromBase64String(decryptString);

                          
                          
                            byte
                          
                          [] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 
                          
                            0
                          
                          
                            , inputData.Length);

                          
                          
                            return
                          
                          
                             Encoding.UTF8.GetString(decryptedData);
}

                          
                          
                            catch
                          
                          
                            
{

                          
                          
                            return
                          
                          
                            ""
                          
                          
                            ;
}
}

                          
                          
                            #endregion
                          
                          
                            public
                          
                          
                            static
                          
                          
                            string
                          
                           GetSubString(
                          
                            string
                          
                           p_SrcString, 
                          
                            int
                          
                           p_StartIndex, 
                          
                            int
                          
                           p_Length, 
                          
                            string
                          
                          
                             p_TailString)
{

                          
                          
                            string
                          
                           myResult =
                          
                             p_SrcString;
Byte[] bComments 
                          
                          =
                          
                             Encoding.UTF8.GetBytes(p_SrcString);

                          
                          
                            foreach
                          
                           (
                          
                            char
                          
                           c 
                          
                            in
                          
                          
                             Encoding.UTF8.GetChars(bComments))
{ 
                          
                          
                            //
                          
                          
                            当是日文或韩文时(注:中文的范围:\u4e00 - \u9fa5, 日文在\u0800 - \u4e00, 韩文为\xAC00-\xD7A3)
                          
                          
                            if
                          
                           ((c > 
                          
                            '
                          
                          
                            \u0800
                          
                          
                            '
                          
                           && c < 
                          
                            '
                          
                          
                            \u4e00
                          
                          
                            '
                          
                          ) || (c > 
                          
                            '
                          
                          
                            \xAC00
                          
                          
                            '
                          
                           && c < 
                          
                            '
                          
                          
                            \xD7A3
                          
                          
                            '
                          
                          
                            ))
{

                          
                          
                            //
                          
                          
                            if (System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\u0800-\u4e00]+") || System.Text.RegularExpressions.Regex.IsMatch(p_SrcString, "[\xAC00-\xD7A3]+"))

                          
                          
                            //
                          
                          
                            当截取的起始位置超出字段串长度时
                          
                          
                            if
                          
                           (p_StartIndex >=
                          
                             p_SrcString.Length)

                          
                          
                            return
                          
                          
                            ""
                          
                          
                            ;

                          
                          
                            else
                          
                          
                            return
                          
                          
                             p_SrcString.Substring(p_StartIndex,
((p_Length 
                          
                          + p_StartIndex) > p_SrcString.Length) ? (p_SrcString.Length -
                          
                             p_StartIndex) : p_Length);
}
}

                          
                          
                            if
                          
                           (p_Length >= 
                          
                            0
                          
                          
                            )
{

                          
                          
                            byte
                          
                          [] bsSrcString =
                          
                             Encoding.Default.GetBytes(p_SrcString);

                          
                          
                            //
                          
                          
                            当字符串长度大于起始位置
                          
                          
                            if
                          
                           (bsSrcString.Length >
                          
                             p_StartIndex)
{

                          
                          
                            int
                          
                           p_EndIndex =
                          
                             bsSrcString.Length;

                          
                          
                            //
                          
                          
                            当要截取的长度在字符串的有效长度范围内
                          
                          
                            if
                          
                           (bsSrcString.Length > (p_StartIndex +
                          
                             p_Length))
{
p_EndIndex 
                          
                          = p_Length +
                          
                             p_StartIndex;
}

                          
                          
                            else
                          
                          
                            
{ 
                          
                          
                            //
                          
                          
                            当不在有效范围内时,只取到字符串的结尾
                          
                          
                            
p_Length 
                          
                          = bsSrcString.Length -
                          
                             p_StartIndex;
p_TailString 
                          
                          = 
                          
                            ""
                          
                          
                            ;
}

                          
                          
                            int
                          
                           nRealLength =
                          
                             p_Length;

                          
                          
                            int
                          
                          [] anResultFlag = 
                          
                            new
                          
                          
                            int
                          
                          
                            [p_Length];

                          
                          
                            byte
                          
                          [] bsResult = 
                          
                            null
                          
                          
                            ;

                          
                          
                            int
                          
                           nFlag = 
                          
                            0
                          
                          
                            ;

                          
                          
                            for
                          
                           (
                          
                            int
                          
                           i = p_StartIndex; i < p_EndIndex; i++
                          
                            )
{

                          
                          
                            if
                          
                           (bsSrcString[i] > 
                          
                            127
                          
                          
                            )
{
nFlag
                          
                          ++
                          
                            ;

                          
                          
                            if
                          
                           (nFlag == 
                          
                            3
                          
                          
                            )
nFlag 
                          
                          = 
                          
                            1
                          
                          
                            ;
}

                          
                          
                            else
                          
                          
                            
nFlag 
                          
                          = 
                          
                            0
                          
                          
                            ;
anResultFlag[i] 
                          
                          =
                          
                             nFlag;
}

                          
                          
                            if
                          
                           ((bsSrcString[p_EndIndex - 
                          
                            1
                          
                          ] > 
                          
                            127
                          
                          ) && (anResultFlag[p_Length - 
                          
                            1
                          
                          ] == 
                          
                            1
                          
                          
                            ))
nRealLength 
                          
                          = p_Length + 
                          
                            1
                          
                          
                            ;
bsResult 
                          
                          = 
                          
                            new
                          
                          
                            byte
                          
                          
                            [nRealLength];
Array.Copy(bsSrcString, p_StartIndex, bsResult, 
                          
                          
                            0
                          
                          
                            , nRealLength);
myResult 
                          
                          =
                          
                             Encoding.Default.GetString(bsResult);
myResult 
                          
                          = myResult +
                          
                             p_TailString;
}
}

                          
                          
                            return
                          
                          
                             myResult;
}
}
                          
                        

  。

最后此篇关于篇(16)-Asp.NetCore入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二)的文章就讲到这里了,如果你想了解更多关于篇(16)-Asp.NetCore入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com