最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nodejs中express搭建權(quán)限管理系統(tǒng)

 更新時(shí)間:2017年09月15日 09:26:24   作者:藍(lán)之礬  
本篇文章主要介紹了詳解express搭建權(quán)限管理系統(tǒng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

權(quán)限管理,是管理系統(tǒng)中的常見組件。通常需要定義資源,把資源調(diào)配給用戶,通過判斷用戶是否有權(quán)限增刪改查來實(shí)現(xiàn)。

初衷:

使用express開發(fā)過的項(xiàng)目大大小小加在一起也有二十多個(gè)了,之前做的各個(gè)項(xiàng)目都是獨(dú)立存在的。最近領(lǐng)導(dǎo)建議說把這些小項(xiàng)目整合到一個(gè)大的平臺(tái)上,給各部門開權(quán)限,讓他們?cè)谝粋€(gè)平臺(tái)上進(jìn)行操作。這樣做的好處,首先是便于項(xiàng)目管理,其次是節(jié)約開發(fā)成本。但好像目前使用nodejs做權(quán)限管理的資料并不多,這里特意分享出來,僅供參考。

一開始在node_acl、Connect Roles、rbac這幾個(gè)框架中徘徊,最終選擇的node_acl框架,但node_acl只幫你做了權(quán)限管理的一部分工作,只保存用戶、角色、資源三者 之間的關(guān)聯(lián)關(guān)系,用戶、角色、資源本身并沒有保存。而我們要做的就是把用戶、角色、資源的增刪改查補(bǔ)齊,就是一個(gè)完整的權(quán)限管理系統(tǒng)了。

預(yù)期效果:

超級(jí)管理員登錄后,可以進(jìn)行所有操作,可以看到所有菜單欄;
 普通用戶登錄后只有部分權(quán)限,只能看到部分菜單欄或操作按鈕。

主要模塊:

  • express:node框架
  • express-hbs:模板引擎
  • node_acl:權(quán)限管理系統(tǒng)的核心
  • mongodb:數(shù)據(jù)庫
  • sails-mongodb:連接mongodb的引擎

前端

Amaze ui、angular、Z-Tree

源碼地址:https://github.com/wuwanyu/aclDemo

運(yùn)行前提:

安裝mongodb數(shù)據(jù)庫

運(yùn)行

1. 數(shù)據(jù)準(zhǔn)備

(1) 將源代碼目錄下sql文件夾的內(nèi)容,拷貝到mongodb安裝目錄的bin目錄下
(2) 命令行方式進(jìn)入mongodb安裝目錄的bin目錄下,運(yùn)行 mongorestore -d acltest acltest.dmp/acltest,將數(shù)據(jù)導(dǎo)入acltest表

2.安裝依賴包:npm install

3. 運(yùn)行:npm start

4.在瀏覽器輸入: http://localhost:3000(用戶名/密碼:admin/admin 或 user/123)

部分截圖

 

接口文檔

資源相關(guān):

1.保存資源樹
2.獲取資源列表

角色相關(guān):

1.添加角色
2.修改角色
3.查詢角色列表
4.刪除角色
4.查詢角色詳情(含角色的權(quán)限列表)

用戶相關(guān):

1.用戶登錄
2.用戶退出
3.添加用戶
4.修改用戶
5.刪除用戶
6.獲取用戶列表
7.查詢用戶詳情(含用戶權(quán)限列表)
8.給用戶添加角色
9.獲取用戶角色

資源

1.保存資源樹(增加、修改、刪除都是這個(gè)方法)

/api/acl_resource/addArray
參數(shù):
{
 list:JSON.stringify(nodeList)
}
返回值:
{
 code:"200",
 msg:"創(chuàng)建成功!"
}

2.獲取資源列表

/api/acl_resource/getList
參數(shù):無
返回值:
{
 "code": "200",
 "msg": "獲取詳情成功",
 "result": [
  {
   "pId": "0",
   "name": "全部",
   "pinyin_name": "quanbu",
   "createdAt": "2017-05-26T09:49:03.139Z",
   "updatedAt": "2017-05-27T07:17:41.959Z",
   "id": "1"
  },
  {
   "pId": "1",
   "name": "首頁",
   "pinyin_name": "shouye",
   "createdAt": "2017-05-26T09:49:03.141Z",
   "updatedAt": "2017-05-27T07:17:41.961Z",
   "id": "41cd1dce-66c9-4aca-91c2-9135fba291c3"
  },
  {
   "pId": "1",
   "name": "經(jīng)適房",
   "pinyin_name": "jingshifang",
   "createdAt": "2017-05-26T09:49:03.142Z",
   "updatedAt": "2017-05-27T07:17:41.962Z",
   "id": "d2da6e56-f005-43cf-b109-af3a966fb059"
  },
  {
   "pId": "d2da6e56-f005-43cf-b109-af3a966fb059",
   "name": "經(jīng)適房首頁",
   "pinyin_name": "jingshifangshouye",
   "createdAt": "2017-05-26T09:49:03.142Z",
   "updatedAt": "2017-05-27T07:17:41.963Z",
   "id": "74a7970a-d53e-494b-9671-4b7b415c3469"
  },
  {
   "pId": "d2da6e56-f005-43cf-b109-af3a966fb059",
   "name": "經(jīng)適房歷史",
   "pinyin_name": "jingshifanglishi",
   "createdAt": "2017-05-26T09:49:03.143Z",
   "updatedAt": "2017-05-27T07:17:41.964Z",
   "id": "15862997-acef-43c1-a1c3-3af4b8e6588b"
  },
  {
   "pId": "1",
   "name": "對(duì)賬單",
   "pinyin_name": "duizhangdan",
   "createdAt": "2017-05-26T09:51:48.411Z",
   "updatedAt": "2017-05-27T07:17:41.965Z",
   "id": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df"
  },
  {
   "pId": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df",
   "name": "對(duì)賬單首頁",
   "pinyin_name": "duizhangdanshouye",
   "createdAt": "2017-05-26T09:51:48.412Z",
   "updatedAt": "2017-05-27T07:17:41.966Z",
   "id": "c0f68fa4-81cd-4908-8005-97c88445d7b3"
  },
  {
   "pId": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df",
   "name": "對(duì)賬單管理",
   "pinyin_name": "duizhangdanguanli",
   "createdAt": "2017-05-26T09:51:48.412Z",
   "updatedAt": "2017-05-27T07:17:41.966Z",
   "id": "5fe3e266-5a2a-47a4-b309-ee6f15db49ec"
  },
  {
   "pId": "1",
   "name": "系統(tǒng)管理",
   "pinyin_name": "xitongguanli",
   "createdAt": "2017-05-26T09:51:48.413Z",
   "updatedAt": "2017-05-27T07:17:41.966Z",
   "id": "fbe848c4-950e-402d-92c5-6fe067fd1bac"
  },
  {
   "pId": "fbe848c4-950e-402d-92c5-6fe067fd1bac",
   "name": "用戶管理",
   "pinyin_name": "yonghuguanli",
   "createdAt": "2017-05-26T09:51:48.416Z",
   "updatedAt": "2017-05-27T07:17:41.967Z",
   "id": "1fd06306-6539-48e5-bf10-99ecd337e143"
  },
  {
   "pId": "fbe848c4-950e-402d-92c5-6fe067fd1bac",
   "name": "資源管理",
   "pinyin_name": "ziyuanguanli",
   "createdAt": "2017-05-26T09:51:48.416Z",
   "updatedAt": "2017-05-27T07:17:41.969Z",
   "id": "5de41a10-f31f-4eb2-91ba-25da102a25aa"
  },
  {
   "pId": "fbe848c4-950e-402d-92c5-6fe067fd1bac",
   "name": "角色管理",
   "pinyin_name": "jiaoseguanli",
   "createdAt": "2017-05-26T09:51:48.416Z",
   "updatedAt": "2017-05-27T07:17:41.970Z",
   "id": "9ffb5a8a-c304-403a-a724-f47cc73a9162"
  },
  {
   "pId": "1",
   "name": "new node1",
   "pinyin_name": "new node1",
   "createdAt": "2017-05-27T07:17:41.971Z",
   "updatedAt": "2017-05-27T07:17:41.971Z",
   "id": "d336dd69-80c7-492f-aee7-78a651b8305e"
  }
 ],
 "count": 13
}

角色

1.查詢角色列表

/api/acl_role/getList:獲取角色列表
參數(shù):無
返回值:
{
 "code": "200",
 "msg": "獲取詳情成功",
 "result": [
  {
   "name": "經(jīng)適房用戶",
   "createdAt": "2017-05-26T09:49:22.361Z",
   "updatedAt": "2017-05-26T09:49:22.361Z",
   "id": "27aab6d9-325c-4c88-be4a-5da516dc9613"
  },
  {
   "name": "對(duì)賬單用戶",
   "createdAt": "2017-05-26T09:52:15.061Z",
   "updatedAt": "2017-05-26T09:52:15.061Z",
   "id": "ba306957-9c80-4abb-89fd-17be828dd5f5"
  },
  {
   "name": "對(duì)賬單管理員",
   "createdAt": "2017-05-26T09:52:26.914Z",
   "updatedAt": "2017-05-26T09:52:26.914Z",
   "id": "fc154424-2264-4de9-9a7c-1b1df048f802"
  },
  {
   "name": "超級(jí)管理員",
   "createdAt": "2017-05-26T09:52:39.894Z",
   "updatedAt": "2017-05-26T09:52:39.894Z",
   "id": "442cfc56-23a9-4cb9-85b5-641bc161c4c3"
  }
 ],
 "count": 4
}

2.修改角色

/api/acl_role/update
參數(shù):
{
 id:xxx,
 name:xxx,
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.update
}

3.查詢角色詳情(含角色的權(quán)限列表)

/api/acl_role/getOne
參數(shù):
id:27aab6d9-325c-4c88-be4a-5da516dc9613
返回值:
{
 "code": "200",
 "msg": "獲取詳情成功",
 "result": {
  "info": {
   "name": "經(jīng)適房用戶",
   "createdAt": "2017-05-26T09:49:22.361Z",
   "updatedAt": "2017-05-26T09:49:22.361Z",
   "id": "27aab6d9-325c-4c88-be4a-5da516dc9613"
  },
  "resources": {
   "1": ["*"],
   "74a7970a-d53e-494b-9671-4b7b415c3469":["*"],
   "15862997-acef-43c1-a1c3-3af4b8e6588b": ["*"],
   "d2da6e56-f005-43cf-b109-af3a966fb059": ["*"],
   "d336dd69-80c7-492f-aee7-78a651b8305e":["*"]
  }
 }
}

4.刪除角色

/api/acl_role/delete
① db刪除角色
② acl刪除該角色和資源的關(guān)系removeAllow、刪除角色removeRole
參數(shù):
{
 id:xxx,
}
返回值:
{
code:"200",
msg:"刪除成功!",
result:result
}

5.給角色添加資源

/api/acl_role/allow
① 刪除角色和資源的關(guān)系acl.removeAllow
② 給角色和資源添加關(guān)系acl.allow
參數(shù):
{
 role:xxx,
 resources:xxx
}
返回值:
{
code:"200",
msg:"成功!"
}

用戶相關(guān):

1.用戶登錄

/api/acl_user/login
參數(shù):
{
 account:xxx,
 password:xxx
}
返回值:
{
code:200,
msg:"登錄成功"
}
{
code:400,
msg:"密碼錯(cuò)誤"
}
{
code:400,
msg:"賬號(hào)不存在"
}

2.用戶退出

/api/acl_user/logout
參數(shù):{}
返回值:
{
code:200,
msg:"退出成功!"
}

3.添加用戶

/api/acl_user/add
參數(shù):
{
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"創(chuàng)建成功!",
result:data.save
}

4.修改用戶

/api/acl_user/update
參數(shù):
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}

5.查詢用戶詳情(含用戶權(quán)限列表)

/api/acl_user/getOne
① db獲取用戶信息
② acl獲取用戶權(quán)限allowedPermissions
參數(shù):
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}

6.獲取用戶列表

/api/acl_user/getList
參數(shù):
{
 
}
返回值:
{
 "code": "200",
 "msg": "獲取詳情成功",
 "result": [
  {
   "name": "wuwanyu",
   "createdAt": "2017-05-27T02:14:19.994Z",
   "updatedAt": "2017-05-27T02:50:56.309Z",
   "account": "120",
   "password": "123",
   "id": "7daa4635-9f9d-4c79-9f15-c827097ac15a"
  }
 ],
 "count": 1
}

7.刪除用戶

/api/acl_user/delete
① db刪除用戶
② acl刪除用戶角色關(guān)系removeUserRoles、刪除用戶removeUser

參數(shù):
{
 id:xxx
}
返回值:
{
code:"200",
msg:"刪除成功!",
result:result
}

8.獲取用戶權(quán)限

/api/acl_user/allowedPermissions
參數(shù):
userId:xxx
resources:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

9.給用戶添加角色

/api/acl_user/addUserRoles
① 獲取用戶所有角色acl.userRoles、刪除用戶所有角色acl.removeUserRoles
② 添加新的角色acl.addUserRoles
參數(shù):
userId:xxx
roles:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

10.給用戶添加角色

/api/acl_user/userRoles
① 獲取用戶所有角色acl.userRoles
參數(shù):
userId:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

nodejs開源權(quán)限管理框架參考:

node_acl(1373星):https://github.com/OptimalBits/node_acl
優(yōu)點(diǎn):支持express

Connect Roles(564星): https://github.com/ForbesLindesay/connect-roles
點(diǎn)評(píng):支持express,還需要引入passport.js

rbac(309星 ):https://github.com/CherryProjects/rbac
優(yōu)點(diǎn):支持express

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js中Path 模塊的介紹和使用示例小結(jié)

    Node.js中Path 模塊的介紹和使用示例小結(jié)

    Node.js path 模塊提供了一些用于處理文件路徑的小工具,下面通過本文給大家介紹Node.js中Path 模塊的介紹和使用示例小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 基于Node.js的http模塊搭建HTTP服務(wù)器

    基于Node.js的http模塊搭建HTTP服務(wù)器

    這篇文章主要為大家介紹了基于Node.js的http模塊來搭建HTTP服務(wù)器的示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Node.JS用純JavaScript生成圖片或滑塊式驗(yàn)證碼功能

    Node.JS用純JavaScript生成圖片或滑塊式驗(yàn)證碼功能

    有一些Node.JS圖片生成類庫,比如node-captcha等的類庫,需要c/c++程序生成圖片。跨平臺(tái)部署不是很方便。這里介紹幾個(gè)用純JS實(shí)現(xiàn)的圖片驗(yàn)證碼生成模塊,需要的朋友可以參考下
    2019-09-09
  • Nodejs中自定義事件實(shí)例

    Nodejs中自定義事件實(shí)例

    這篇文章主要介紹了Nodejs中自定義事件實(shí)例,比較簡單的一個(gè)例子,需要的朋友可以參考下
    2014-06-06
  • Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js利用Net模塊實(shí)現(xiàn)多人命令行聊天室的方法

    Node.js Net 模塊提供了一些用于底層的網(wǎng)絡(luò)通信的小工具,包含了創(chuàng)建服務(wù)器/客戶端的方法,下面這篇文章主要給大家介紹了Node.js利用Net模塊實(shí)現(xiàn)命令行多人聊天室的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • 淺談node中的exports與module.exports的關(guān)系

    淺談node中的exports與module.exports的關(guān)系

    本篇文章主要介紹了淺談node中的exports與module.exports的關(guān)系,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Nodejs關(guān)于gzip/deflate壓縮詳解

    Nodejs關(guān)于gzip/deflate壓縮詳解

    本文主要向大家介紹了nodejs中關(guān)于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細(xì),并附帶示例,這里推薦給大家參考下。
    2015-03-03
  • 在Node.js應(yīng)用程序中處理大數(shù)的操作指南

    在Node.js應(yīng)用程序中處理大數(shù)的操作指南

    在JavaScript生態(tài)系統(tǒng)中,你可以使用BigInt來處理大整數(shù),但是,你也可以使用具有類似于BigInt功能的第三方庫,本文將是使用BigInt和提供類似功能的流行庫管理大數(shù)的完整指南,我們還將比較第三方庫的用例、優(yōu)勢(shì)和劣勢(shì)
    2023-06-06
  • Node.js中處理錯(cuò)誤的4種最佳方法分享

    Node.js中處理錯(cuò)誤的4種最佳方法分享

    錯(cuò)誤處理并不是編碼工作中最吸引人的部分,但在?Node.js?中構(gòu)建可靠、生產(chǎn)級(jí)別的應(yīng)用程序時(shí),它是絕對(duì)必要的,下面小編就來為大家介紹一下Node.js中處理錯(cuò)誤的4種最佳方法吧
    2025-02-02
  • 如何在ubuntu18.04安裝node?14.16.0

    如何在ubuntu18.04安裝node?14.16.0

    這篇文章介紹了在Ubuntu?18.04上安裝Node.js?14.16.0的詳細(xì)步驟,包括檢查服務(wù)器類型、下載合適的Node.js版本、解壓和移動(dòng)文件夾、編輯環(huán)境變量文件、重新編譯配置文件以及解決可能遇到的版本沖突問題,感興趣的朋友跟隨小編一起看看吧
    2024-11-11

最新評(píng)論

疏附县| 慈溪市| 屯门区| 上思县| 伊宁县| 新平| 临泉县| 长汀县| 鹤庆县| 石渠县| 仁怀市| 深圳市| 青阳县| 昌乐县| 宁城县| 南溪县| 尚义县| 昌都县| 衡东县| 项城市| 河北省| 会理县| 铜鼓县| 滨海县| 恩平市| 仁寿县| 文昌市| 沁源县| 嵩明县| 新巴尔虎右旗| 江北区| 包头市| 津南区| 温宿县| 乐清市| 军事| 黄石市| 昭苏县| 开原市| 奉新县| 翁源县|