eggjs学习笔记第三十七天:eggjs后管类系统权限管理RBAC第二篇

1、角色的增删改查

①新建关于角色表的schema,model>role.js下新建role.js,键入以下代码:javascript

module.exports = app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;

  var d = new Date();

  const RoleSchema = new Schema({
    title: { type: String },
    description: { type: String },
    status: { type: Number, default: 1 },
    add_time: {
      type: Number,
      default: d.getTime()
    }
  });

  return mongoose.model("Role", RoleSchema, "role");
};

②新建路由规则,新增角色提交表单会调用。java

router.post("/admin/role/doAdd", controller.admin.role.doAdd);

③增长角色的表单(增长隐藏域 csrf验证)数据库

<form action="/admin/role/doAdd" method="post">
     <ul>
         <input type='hidden' name="_csrf" value="<%=csrf%>"></input>
         <li>  角色名称: <input type="text" name="title"/></li>
               角色描述:<textarea name="description" id="" cols="60" rows="8"></textarea>
         <li>
         <br/>
         <button type="submit" class="btn btn-default">提交</button>
         </li>

     </ul>
</form>

④role controller打印post数据:app

async doAdd() {
    console.log(this.ctx.request.body);
}

⑤增长角色表单,点提交async

⑥执行role下的doAdd controller的方法,打印post提交的数据mongoose

async doAdd() {
    console.log(this.ctx.request.body);
  }

⑥修改成以下逻辑:向数据库中插入数据工具

async doAdd() {
    // console.log(this.ctx.request.body);
    let role = this.ctx.model.Role({
      title: this.ctx.request.body.title,
      description: this.ctx.request.body.description
    });
    let result = await role.save();
    console.log(result);
    await this.success("/admin/role", "增长角色成功");
  }

⑦如可视化工具可知,数据库插入了一条数据:post

⑧改造角色列表页面执行的controllerthis

async index() {
    let list = await this.ctx.model.Role.find({});
    // console.log(list);
    await this.ctx.render("admin/role/index", {
      list
    });
  }

⑨角色模板页面的controller改造为以下所示:spa

<table class="table table-bordered">
                            <thead>
                                <tr class="th">
                                    <th>角色名称</th>
                                    <th>描述</th>
                                    <th>增长时间</th>
                                    <th>操做</th>
                                </tr>
                            </thead>
                            <tbody>
                                <%for(var i = 0;i<list.length;i++){%>
                                    <tr>
                                        <td><%=list[i].title%></td>
                                        <td><%=list[i].description%></td>
                                        <td><%=list[i].addTime%></td>

                                        <td class="text-center">修改  删除</td>
                                    </tr>
                                <%}%>
                            </tbody>
                        </table>

⑩添加角色成功后,便可读出数据作页面渲染:

十一、编辑功能 修改按钮:访问edit路由,执行controller的edit方法,传一个id到下个页面。

<td class="text-center">
      <a href="/admin/role/edit?id=<%=list[i]._id%>">修改</a>
 </td>

十二、下个页面根据这个id去查询表单,作编辑回显。

async edit() {
    let id = this.ctx.query.id;
    console.log(id);
    let list = await this.ctx.model.Role.find({ _id: id });
    console.log(list);
    await this.ctx.render("admin/role/edit", { list });
  }

1三、点提交要修改表单,则配置修改路由: 

router.post("/admin/role/doEdit", controller.admin.role.doEdit);

1四、doEdit执行如下逻辑:查找对应id修改数据。

async doEdit() {
    let { _id, title, description } = this.ctx.request.body;
    let result = await this.ctx.model.Role.updateOne(
      { _id },
      { title, description }
    );
    console.log(result);
    if (result) {
      await this.success("/admin/role", "编辑角色成功");
    } else {
      await this.error("/admin/role", "编辑角色失败");
    }
  }

15.

 

1六、删除操做的话取一个id执行删除操做就好了,明天说下封装公共删除方法。碎觉。

相关文章
相关标签/搜索