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);
  }

 

碎碎碎

相關文章
相關標籤/搜索