Maison  >  Article  >  interface Web  >  Explication détaillée du système de gestion des autorisations de construction dans Express dans Nodejs

Explication détaillée du système de gestion des autorisations de construction dans Express dans Nodejs

巴扎黑
巴扎黑original
2017-09-16 09:28:013469parcourir

Cet article présente principalement l'explication détaillée du système de gestion des autorisations d'Express. L'éditeur pense qu'il est plutôt bon. Maintenant, je vais le partager avec vous et vous donner une référence. Suivons l'éditeur et jetons un coup d'œil

La gestion des autorisations est un composant courant du système de gestion. Il est généralement nécessaire de définir des ressources et de les allouer aux utilisateurs. Ceci est réalisé en déterminant si l'utilisateur a l'autorisation d'ajouter, de supprimer, de modifier et de vérifier.

Intention initiale :

Il existe plus de 20 grands et petits projets développés via Express, et chacun des projets précédents existait indépendamment. Récemment, le leader a suggéré d'intégrer ces petits projets dans une grande plateforme, en accordant des autorisations à différents départements et en leur permettant de fonctionner sur une seule plateforme. Les avantages de cette démarche sont d’une part de faciliter la gestion de projet, et d’autre part de réduire les coûts de développement. Mais il semble qu'il n'y ait pas beaucoup d'informations sur l'utilisation de nodejs pour la gestion des autorisations à l'heure actuelle. Je les partage ici à titre de référence uniquement.

Au début, j'ai erré parmi les frameworks node_acl, Connect Roles et rbac, et j'ai finalement choisi le framework node_acl, mais node_acl ne vous aide qu'avec une partie du travail de gestion des autorisations, et n'enregistre que les utilisateurs, les rôles et ressources. Les relations entre les utilisateurs, les rôles et les ressources elles-mêmes ne sont pas enregistrées. Ce que nous devons faire est de terminer l'ajout, la suppression, la modification et la vérification des utilisateurs, des rôles et des ressources, et ce sera un système complet de gestion des autorisations.

Résultats attendus :

Après s'être connecté, le super administrateur peut effectuer toutes les opérations et voir toutes les barres de menus
Les utilisateurs ordinaires n'ont que des autorisations partielles après s'être connectés ; . Seule une partie de la barre de menu ou des boutons d'action est visible.

Modules principaux :

  • express : framework de nœuds

  • express-hbs : moteur de modèles

  • node_acl : le cœur du système de gestion des autorisations

  • mongodb : base de données

  • sails-mongodb : connexion moteur mongodb

Front-end  :

Amaze ui, angulaire, Z-Tree

Adresse du code source : https:// github.com/wuwanyu/aclDemo

Prérequis d'exécution :

Installer la base de données mongodb

Exécuter

1. Préparation des données

(1) Copiez le contenu du dossier sql dans le répertoire du code source dans le répertoire bin du répertoire d'installation de mongodb
(2) Entrez le répertoire bin du répertoire d'installation de mongodb en utilisant la ligne de commande et exécutez mongorestore -d acltest acltest.dmp/acltest, importez les données dans la table acltest

2 Installez les packages de dépendances : npm install

3.

4. Parcourir l'entrée du serveur : http://localhost:3000 (nom d'utilisateur/mot de passe : admin/admin ou user/123)

Captures d'écran partielles

Document d'interface

Ressource liée :


1. Enregistrer l'arborescence des ressources

2. Obtenir la liste des ressources

Rôle lié :


1. Ajouter un rôle

2. Modifier un rôle
3. Interroger la liste des rôles
4. Supprimer le rôle
4. Interroger les détails du rôle (y compris la liste des autorisations de rôle)

Connexe à l'utilisateur :


1. >2. Sortie de l'utilisateur

3. Ajouter un utilisateur
4. Modifier l'utilisateur
5. Supprimer l'utilisateur
6. Obtenir la liste des utilisateurs
7. >8. Donner à l'utilisateur ajoute un rôle
9. Obtenir le rôle de l'utilisateur


Ressources

1. , modifier et supprimer)



2. Obtenir la liste des ressources

/api/acl_resource/addArray
参数:
{
 list:JSON.stringify(nodeList)
}
返回值:
{
 code:"200",
 msg:"创建成功!"
}



Personnage

/api/acl_resource/getList
参数:无
返回值:
{
 "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": "经适房",
   "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": "经适房首页",
   "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": "经适房历史",
   "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": "对账单",
   "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": "对账单首页",
   "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": "对账单管理",
   "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": "系统管理",
   "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. Interroger la liste des personnages



2.

/api/acl_role/getList:获取角色列表
参数:无
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "result": [
  {
   "name": "经适房用户",
   "createdAt": "2017-05-26T09:49:22.361Z",
   "updatedAt": "2017-05-26T09:49:22.361Z",
   "id": "27aab6d9-325c-4c88-be4a-5da516dc9613"
  },
  {
   "name": "对账单用户",
   "createdAt": "2017-05-26T09:52:15.061Z",
   "updatedAt": "2017-05-26T09:52:15.061Z",
   "id": "ba306957-9c80-4abb-89fd-17be828dd5f5"
  },
  {
   "name": "对账单管理员",
   "createdAt": "2017-05-26T09:52:26.914Z",
   "updatedAt": "2017-05-26T09:52:26.914Z",
   "id": "fc154424-2264-4de9-9a7c-1b1df048f802"
  },
  {
   "name": "超级管理员",
   "createdAt": "2017-05-26T09:52:39.894Z",
   "updatedAt": "2017-05-26T09:52:39.894Z",
   "id": "442cfc56-23a9-4cb9-85b5-641bc161c4c3"
  }
 ],
 "count": 4
}


3. Interroger les détails du rôle (y compris la liste des autorisations de rôle)


/api/acl_role/update
参数:
{
 id:xxx,
 name:xxx,
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.update
}


4. rôle


/api/acl_role/getOne
参数:
id:27aab6d9-325c-4c88-be4a-5da516dc9613
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "result": {
  "info": {
   "name": "经适房用户",
   "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":["*"]
  }
 }
}


5. Ajouter des ressources au personnage


/api/acl_role/delete
① db删除角色
② acl删除该角色和资源的关系removeAllow、删除角色removeRole
参数:
{
 id:xxx,
}
返回值:
{
code:"200",
msg:"删除成功!",
result:result
}


Connexe à l'utilisateur :

/api/acl_role/allow
① 删除角色和资源的关系acl.removeAllow
② 给角色和资源添加关系acl.allow
参数:
{
 role:xxx,
 resources:xxx
}
返回值:
{
code:"200",
msg:"成功!"
}
1. Connexion de l'utilisateur


2.


/api/acl_user/login
参数:
{
 account:xxx,
 password:xxx
}
返回值:
{
code:200,
msg:"登录成功"
}
{
code:400,
msg:"密码错误"
}
{
code:400,
msg:"账号不存在"
}

3. Ajouter un utilisateur


/api/acl_user/logout
参数:{}
返回值:
{
code:200,
msg:"退出成功!"
}

4.


5. Interroger les détails de l'utilisateur (y compris la liste des autorisations des utilisateurs)
/api/acl_user/add
参数:
{
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"创建成功!",
result:data.save
}



6. liste des utilisateurs
/api/acl_user/update
参数:
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}



7. Supprimer l'utilisateur
/api/acl_user/getOne
① db获取用户信息
② acl获取用户权限allowedPermissions
参数:
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}



8. Obtenir les autorisations des utilisateurs
/api/acl_user/getList
参数:
{
 
}
返回值:
{
 "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
}



9. Ajouter des rôles aux utilisateurs
/api/acl_user/delete
① db删除用户
② acl删除用户角色关系removeUserRoles、删除用户removeUser

参数:
{
 id:xxx
}
返回值:
{
code:"200",
msg:"删除成功!",
result:result
}



10. Ajouter des rôles aux utilisateurs
/api/acl_user/allowedPermissions
参数:
userId:xxx
resources:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}



Référence du cadre de gestion des autorisations open source nodejs :
/api/acl_user/addUserRoles
① 获取用户所有角色acl.userRoles、删除用户所有角色acl.removeUserRoles
② 添加新的角色acl.addUserRoles
参数:
userId:xxx
roles:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

node_acl (1373 étoiles) : https : //github.com/OptimalBits/node_acl
Avantages : Prend en charge express

Connect Roles (564 étoiles) : https://github.com/ForbesLindesay/connect-roles
Commentaires : Prend en charge express, mais doit également introduire passeport.js

rbac (309 étoiles) : https://github.com/CherryProjects/rbac
Avantages : prend en charge express

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn