eggjs學習筆記第四十一天:eggjs後管類系統權限管理RBAC之權限列表的添加與展現

1.app>model>access.js寫入定義權限表的schemajavascript

/*
一、模塊名稱: 模塊名稱就是左側的主菜單名稱,若是增長數據的時候是模塊,那麼須要指定節點類型是模塊,而且選擇所屬模塊爲頂級模塊


二、節點類型: 一、表示模塊   二、表示菜單     三、操做


三、操做名稱:若是節點類型是菜單,那麼操做名稱就是左側菜單的名稱。若是節點類型是操做,那麼操做名稱就是具體的操做名稱


四、操做地址:用戶實際訪問的地址


五、所屬模塊:模塊(頂級模塊)  菜單和操做(父親模塊)


*/

module.exports = app => {
  const mongoose = app.mongoose; /*引入創建鏈接的mongoose */
  const Schema = mongoose.Schema;
  var d = new Date();
  const AccessSchema = new Schema({
    module_name: { type: String }, //模塊名稱
    action_name: { type: String }, //操做名稱
    type: { type: Number }, //節點類型 :  一、表示模塊   二、表示菜單     三、操做
    url: { type: String },
    module_id: {
      //此module_id和當前模型的_id關聯     module_id= 0 表示模塊
      type: Schema.Types.Mixed //混合類型
    },
    sort: {
      type: Number,
      default: 100
    },
    description: { type: String },
    status: {
      type: Number,
      default: 1
    },
    add_time: {
      type: Number,
      default: d.getTime()
    }
  });
  return mongoose.model("Access", AccessSchema, "access");
};

2.增長菜單側邊欄權限連接:html

<li>
     <h4>權限管理</h4>
           <ul>
               <li  class="list-group-item"> <a href="/admin/access"> 權限列表</a></li>
                
               <li class="list-group-item"> <a href="/admin/access/add" >增長權限</a></li>
           </ul>
</li>

 

3.定義路由:java

router.get('/admin/access', controller.admin.access.index);
  router.get('/admin/access/add', controller.admin.access.add);

 

4.先實現權限add的方法:改造權限add頁:app

<%- 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/access/doAdd" method="post">
                                <ul>
        
                                    <input type="hidden" name="_csrf" value="<%=csrf%>">
                                    <li>  模塊名稱: <input type="text" name="module_name"/></li>
                                    <li>
                                        
                                        節點類型:
                                        <!-- 一、表示模塊   二、表示菜單     三、操做 -->
                                        <select name="type" id="type">
                                                <option value="1">模塊</option>
                                                <option value="2">菜單</option>
                                                <option value="3">操做</option>
                                        </select>
        
                                    </li>
        
                                    <li>  操做名稱: <input type="text" name="action_name"/></li>
        
                                    <li>  操做地址: <input type="text" name="url"/></li>
        
        
                                    <li>  所屬模塊:
                                            <select name="module_id" id="module_id">
                                                    <option value="0">---頂級模塊--</option>
                                                    
                                                    <%for(var i=0;i<moduleList.length;i++){%>
                                                         <option value="<%=moduleList[i]._id%>"><%=moduleList[i].module_name%></option> 

                                                    <%}%>
                                                    
                                                    
                                            </select>
                                    </li>
        
        
                                    <li>  排  序: <input type="text" name="sort" value="100"/></li>
        
        
                                    <li>   描  述 :	
        
                                        <textarea name="description" id="description" cols="60" rows="5"></textarea>
                                    </li>
        
                                   
                                    <li>
                                        <br/>
                                        <button type="submit" class="btn btn-default">提交</button>
                                    </li>
        
                                </ul>
        
        
                                </form>
                    </div>
                </div>


            </div>

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

</body>
</html>

5.定義增長權限的方法。async

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

    var addResult = this.ctx.request.body;
    var module_id = addResult.module_id;

    //菜單  或者操做
    if (module_id) {
      addResult.module_id = this.app.mongoose.Types.ObjectId(module_id); //調用mongoose裏面的方法把字符串轉換成ObjectId
    }
    var access = new this.ctx.model.Access(addResult);

    access.save();

    await this.success("/admin/access", "增長權限成功");
  }

 

6.添加模塊,模塊就是一級菜單。 依次添加下列三種模塊。mongoose

可得access表中有三條數據:ide

7.添加二級菜單,須要循環所屬模塊列表,訪問add頁面,查詢模塊列表數據在select循環。 module_id = 0就是頂級模塊post

async add() {
    //獲取模塊列表

    var result = await this.ctx.model.Access.find({ module_id: "0" });

    await this.ctx.render("admin/access/add", {
      moduleList: result
    });
  }
<li>  所屬模塊:
    <select name="module_id" id="module_id">
           <option value="0">---頂級模塊--</option>
                                                    
           <%for(var i=0;i<moduleList.length;i++){%>
                  <option value="<%=moduleList[i]._id%>"><%=moduleList[i].module_name%></option> 
           <%}%>
                                                    
     </select>
</li>

8.二級菜單照此步驟添加完成。ui

得表中多6個菜單數據。this

 

9.添加操做級權限,也能夠說是按鈕級權限。

 

10.access表的自關聯

async index() {
    // var result=await this.ctx.model.Access.find({});

    // console.log(result);

    // 一、在access表中找出  module_id=0的數據        管理員管理 _id    權限管理 _id    角色管理  (模塊)

    //二、讓access表和access表關聯    條件:找出access表中  module_id等於_id的數據

    var result = await this.ctx.model.Access.aggregate([
      {
        $lookup: {
          from: "access",
          localField: "_id",
          foreignField: "module_id",
          as: "items"
        }
      },
      {
        $match: {
          module_id: "0"
        }
      }
    ]);

    console.log(result);

    await this.ctx.render("admin/access/index", {
      list: result
    });
  }

11.渲染出權限展現頁面:

<%- 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">
                    <form role="form" class="form-inline">
                        <div class="form-group">
                            <label for="name">名稱</label>
                            <input type="text" class="form-control" id="name" placeholder="請輸入名稱">
                        </div>

                        <div class="form-group">
                            <button type="submit" class="btn btn-default">開始搜索</button>
                        </div>
                    </form>
                </div>
            </div>
            <!--
                列表展現
            -->
            <div class="table-responsive">
                <table class="table table-bordered">
                <thead>
                        <tr>
                            <th>模塊名稱</th>
                            <th>節點類型</th>
                            <th>操做名稱</th>     
                            <th>操做地址</th>                        
                            <th>排序</th>
                            <th>描述</th>                       
                            
                            <th class="text-center">操做</th>
                        </tr>
                    </thead>
                    <tbody>
                        


                        <%for(var i=0;i<list.length;i++){%>
                            <tr>
                                <td><%=list[i].module_name%></td>
                                <td>     
                                        <%if(list[i].type==1){%>
                                            模塊
                                        <%}else if(list[i].type==2){%>
                                            菜單
                                        <%}else{%>
                                            操做
                                        <%}%>
                                </td>
                                <td><%=list[i].action_name%></td>

                                <td><%=list[i].url%></td>
                                <td><%=list[i].sort%></td>

                                <td><%=list[i].description%></td>
                            
                                <td class="text-center">修改  刪除</td>
                            </tr>

                            <%for(var j=0;j<list[i].items.length;j++){%>
                                        <tr>
                                                <td>----<%=list[i].items[j].module_name%></td>
                                                <td>     
                                                        <%if(list[i].items[j].type==1){%>
                                                            模塊
                                                        <%}else if(list[i].items[j].type==2){%>
                                                            菜單
                                                        <%}else{%>
                                                            操做
                                                        <%}%>
                                                </td>
                                                <td><%=list[i].items[j].action_name%></td>
                
                                                <td><%=list[i].items[j].url%></td>
                                                <td><%=list[i].items[j].sort%></td>
                
                                                <td><%=list[i].items[j].description%></td>
                                            
                                                <td class="text-center">修改  刪除</td>
                                            </tr>

                            <%}%>
                        <%}%>

                    </tbody>
                </table>
            </div>

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

</body>
</html>

 

 

碎覺

相關文章
相關標籤/搜索