eggjs学习笔记第四十天:eggjs后管类系统权限管理RBAC之管理员的修改和删除

1.管理员列表页添加修改和删除的按钮。javascript

<td class="text-center">
     <a href="/admin/manager/edit?id=<%=adminList[i]._id%>">修改</a>
     <a href="/admin/delete?model=Admin&id=<%=adminList[i]._id%>">删除</a>
</td>

2.router.js定义路由html

3.改造manager的edit页面(这里有个坑,role_id在用户表存的是ObjectId)如:java

须要toString一下才能转换成正常的字符串与角色表_id toString一下才能作比较判断。数据库

 

<%- include ../public/page_header.html %>

    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-2">
                <%- include ../public/page_aside.html %>

                </div>
                <div class="col-sm-10">

                    <div class="panel panel-default">
                        <div class="panel-heading">
                  修改管理员
                </div>
                        <div class="panel-body">
                            <div class="table-responsive input-form">
                                <form action="/admin/manager/doEdit" method="post">
                                    <ul>
                                        <input type='hidden' name="_csrf" value="<%=csrf%>"></input>
                                        <input type='hidden' name="_id" value="<%=list[0]._id%>"></input>
                                        <li>  管理员名称: <input type="text" value="<%=list[0].username%>" readonly name="username"/></li>

                                        <li>  管理员密码:  <input type="text" value="" name="password"/></li>
                                        <li>  管理员电话: <input type="text" value="<%=list[0].mobile%>" name="mobile"/></li>
                                        <li>  管理员邮箱: <input type="text" value="<%=list[0].email%>" name="email"/></li>

                                        <li>
                                    管理员角色:
                                    <select name="role_id" id="role_id">
                                                <%for(let i=0;i<roleList.length;i++){%>
                                                    <%if(roleList[i]._id.toString() ==list[0].role_id.toString() ){%>
                                                        <option value="<%=roleList[i]._id%>" selected><%=roleList[i].title%></option>
                                                    <%}else{%>
                                                        <option value="<%=roleList[i]._id%>"><%=roleList[i].title%></option>
                                                    <%}%>
                                                <%}%>
                                            </select>
                                        </li>

                                        <li>
                                            <br/>
                                            <button type="submit" class="btn btn-default">提交</button>
                                        </li>

                                    </ul>

                                </form>
                            </div>
                        </div>

                    </div>

                </div>
            </div>
        </div>

    </body>
</html>

4.渲染manager index页面传入须要修改的信息,在controller>admin>manager>edit方法中修改,获取编辑数据,和角色字典async

async edit() {
    // 获取编辑数据
    let id = this.ctx.query.id;
    let list = await this.ctx.model.Admin.find({ _id: id });
    console.log(list);

    // 获取角色列表
    let roleList = await this.ctx.model.Role.find({});
    console.log(roleList);
    await this.ctx.render("admin/manager/edit", { list, roleList });
  }

5.调用doEdit方法作管理员信息修改,用户名不可编辑,密码若是有值则修改密码,无值则不修改密码ide

async doEdit() {
    let {
      _id,
      username,
      password,
      mobile,
      email,
      role_id
    } = this.ctx.request.body;
    let result;
    if (password) {
      // 添加了新密码
      password = await this.service.tools.md5(password);
      result = await this.ctx.model.Admin.updateOne(
        { _id },
        { username, password, mobile, email, role_id }
      );
    } else {
      // 没添加新密码
      result = await this.ctx.model.Admin.updateOne(
        { _id },
        { username, mobile, email, role_id }
      );
    }

    console.log(result);
    if (result) {
      await this.success("/admin/manager", "编辑管理员成功");
    } else {
      await this.error("/admin/manager", "编辑管理员失败");
    }
  }

6.展现效果:post

编辑前:ui

编辑中:this

编辑后:code

 

6.删除效果太简单了,调用公共delete方法就好。base.js当中

async delete() {
    // 1.获取要删除的数据库表 model
    // 2.获取要删除数据的id _id
    // 3.执行删除
    // 4.返回到之前页面
    let model = this.ctx.request.query.model;
    console.log(model);
    let id = this.ctx.request.query.id;
    await this.ctx.model[model].deleteOne({ _id: id });
    console.log(this.ctx.request.headers["referer"]);
    this.ctx.redirect(this.ctx.state.prevPage);
  }

 

碎碎碎

相关文章
相关标签/搜索