需求:修改系统用户管理,用户有三个权限,金卡管理员,管理员,普通用户。
三个角色在页面上显示的内容不一样,共同点都是用户列表:
金卡:可以看到【管理员】【普通用户】的
管理员:可以看到自己个普通用户的
普通用户:只能看到自己的
目前功能:每行数据后面,新增【编辑】,弹窗,用户名disabled默认自带,旧密码(分角色权限),新密码,确认密码。
确认流程:每个角色可以修改自己的密码,需要旧密码。金卡改管理员,不用旧密码,只用新密码和确认密码;管理员修改普通用户,也是只用新密码和确认密码。
修改密码前,我们肯定是要先获取用户列表数组,那现在后端返回我一个数组,里面有个对象
{
id:1,
username:刘德华,
flag:true
},
{
id:2,
username:刘德华,
flag:true
},
{
id:3,
username:路人甲,
flag:false
},
角色的分配是根据flag来判断,为真就是管理员,为假就是普通用户
那么,提出疑问:是否可以根据flag,来判断修改密码的时候,旧密码是否显示的条件呢?
答案:肯定是不行的
因为,当普通用户登录时候,路人甲的flage为false,但是普通用户改自己密码,需要旧密码。
所以,本文重点来了,当出现三个角色权限的时候,修改密码,我们可以根据用户名判断
当前登录系统用户名和修改用户,是否一致,就显示旧密码,证明是自己改自己密码,需要旧密码;如果不一致,就不显示
获取系统登录用户名:
this.sysLoginUser = window.sessionStorage.getItem('user');
密码修改成功后,路由重定向:
if(this.sysLoginUser === username ){ // console.log('登录用户名和修改用户一致,应该显示旧密码') this.currentUserFlag = true; }else{ // console.log('登录用户名不是修改用户,不显示旧密码') this.currentUserFlag = false; } 传参: if (this.currentUserFlag) { this.editForm.old_password = this.editForm.old_password; } else { delete this.editForm.old_password; } 调接口: await updatePasswordAPI(this.editForm) this.backLogin(); 路由重定向: backLogin(){ if (this.currentUserFlag) { this.$router.push('/login'); } else { } },
优化:自己修改自己密码成功后,因为密码变了,所以需要用户重新登录,路由重定向到login。如果管理员修改普通用户密码,则不需要。