eggjs学习笔记第三十八天:eggjs后管类系统权限管理RBAC封装公共删除方法。

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-18 21:16:42

①admin>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.request.headers["referer"]); 
  }

②定义路由规则:

  router.get("/admin/delete", controller.admin.base.delete);

③删除操作:传入操作表名和要删除的id,就可以实现根据Id删除数据的公共方法。

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

④将下面这段代码封装全局变量:

this.ctx.request.headers["referer"]

⑤在中间件中定义全局变量 prevPage

var url = require("url");

module.exports = (options, app) => {
  return async function adminauth(ctx, next) {
    /*
         1、用户没有登录跳转到登录页面
         2、只有登录以后才可以访问后台管理系统
        */
    ctx.state.csrf = ctx.csrf; //全局变量
    ctx.state.prevPage = ctx.request.headers["referer"];

    //     /admin/verify?mt=0.7466881301614958  转换成  /admin/verify

    var pathname = url.parse(ctx.request.url).pathname;

    if (ctx.session.userinfo) {
      ctx.state.userinfo = ctx.session.userinfo; //全局变量
      // console.log(ctx.state.userinfo);
      await next();
    } else {
      //排除不需要做权限判断的页面  /admin/verify?mt=0.7466881301614958
      if (
        pathname == "/admin/login" ||
        pathname == "/admin/doLogin" ||
        pathname == "/admin/verify"
      ) {
        await next();
      } else {
        ctx.redirect("/admin/login");
      }
    }
  };
};

⑥将delete方法改造为如下,也可以实现删除方法。

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!