>웹 프론트엔드 >JS 튜토리얼 >nodejs의 Express 건물 허가 관리 시스템에 대한 자세한 설명

nodejs의 Express 건물 허가 관리 시스템에 대한 자세한 설명

巴扎黑
巴扎黑원래의
2017-09-16 09:28:013507검색

이 글에서는 권한 관리 시스템을 구축하기 위한 Express에 대한 자세한 설명을 주로 소개합니다. 편집자는 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다.

권한 관리는 관리 시스템의 공통 구성 요소입니다. 일반적으로 리소스를 정의하고 사용자에게 리소스를 할당하는 작업은 사용자에게 추가, 삭제, 수정 및 확인 권한이 있는지 확인하여 수행됩니다.

원래 의도:

express를 사용하여 개발된 크고 작은 프로젝트가 20개가 넘으며, 이전 프로젝트는 각각 독립적으로 존재했습니다. 최근 리더는 이러한 소규모 프로젝트를 대규모 플랫폼으로 통합하고 다양한 부서에 권한을 부여하여 하나의 플랫폼에서 운영할 수 있도록 하자고 제안했습니다. 이를 통해 얻을 수 있는 이점은 첫째로 프로젝트 관리를 용이하게 하고 둘째로 개발 비용을 절감하는 것입니다. 하지만 현재로서는 권한 관리를 위해 nodejs를 사용하는 방법에 대한 정보가 많지 않은 것 같습니다.

처음에는 node_acl, Connect Roles, rbac 프레임워크 사이를 헤매다 결국 node_acl 프레임워크를 선택했지만 node_acl은 권한 관리 작업의 일부만 도와주고 사용자, 역할, 리소스 간의 연결만 저장합니다. . 관계, 사용자, 역할 및 리소스 자체는 저장되지 않습니다. 사용자, 역할, 리소스에 대한 추가, 삭제, 수정, 확인까지 완료하면 완전한 권한 관리 시스템이 됩니다.

예상 결과:

최고 관리자는 로그인 후 모든 작업을 수행하고 모든 메뉴 표시줄을 볼 수 있습니다.
로그인 후 일반 사용자는 부분적인 권한만 가지며 일부 메뉴 표시줄이나 작업 버튼만 볼 수 있습니다.

기본 모듈:

  • express: 노드 프레임워크

  • express-hbs: 템플릿 엔진

  • node_acl: 권한 관리 시스템의 핵심

  • mongodb: 데이터베이스

  • 돛 -mongodb : mongodb

Front-end에 연결된 엔진:

Amaze ui, angle, Z-Tree

소스 코드 주소: https://github.com/wuwanyu/aclDemo

실행 전제 조건:

mongodb 데이터베이스 설치

Run

1. 데이터 준비

(1) 소스코드 디렉터리의 sql 폴더 내용을 mongodb 설치 디렉터리의 bin 디렉터리에 복사합니다
(2) bin 디렉터리를 입력합니다. 명령줄을 사용하여 mongodb 설치 디렉터리 다음으로 mongorestore -d acltest acltest.dmp/acltest를 실행하여 데이터를 acltest 테이블로 가져옵니다

2. 종속성 패키지 설치: npm install

3 실행: npm start

4. . 브라우저에 입력하세요: http://localhost :3000 (사용자 이름/비밀번호: admin/admin 또는 user/123)

부분 스크린샷

인터페이스 문서

관련 리소스:

1 .리소스 트리 저장
2. 리소스 목록 가져오기

역할 관련:

1. 역할 추가
3. 역할 삭제
4. 세부정보(역할 권한 목록 포함)

1. 사용자 로그인

2. 사용자 로그아웃

4. 사용자 수정
6. 세부 정보(사용자 권한 목록 포함)

8. 사용자에게 역할 추가

9. 사용자 역할 가져오기


resources



1. 리소스 트리 저장(이 방법을 추가, 수정 및 삭제)

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

2. 리소스 목록 가져오기


Role


1. 역할 목록 쿼리


/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
}

2.

3. 역할 세부정보 쿼리(포함) 역할 권한 목록)



/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
}

4. 역할 삭제



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

5. 역할에 리소스 추가



/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":["*"]
  }
 }
}

사용자 로그인


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

2. 사용자 로그아웃


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

3. 사용자 추가

/api/acl_user/login
参数:
{
 account:xxx,
 password:xxx
}
返回值:
{
code:200,
msg:"登录成功"
}
{
code:400,
msg:"密码错误"
}
{
code:400,
msg:"账号不存在"
}
5. 사용자 세부정보(사용자 권한 목록 포함)


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

6. 사용자 목록 가져오기


/api/acl_user/add
参数:
{
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"创建成功!",
result:data.save
}

7. 사용자 삭제


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

8. 9. user

에 역할 추가

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

10. 사용자 캐릭터 추가


/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
}

nodejs 오픈 소스 권한 관리 프레임워크 참조:

node_acl(별 1373개): https://github.com/OptimalBits/node_acl

장점: express 지원

Connect Roles(별 564개): https://github.com/ForbesLindesay/connect-roles

댓글: Express를 지원하려면 Passport.js도 도입해야 합니다

rbac(별 309개): https://github.com/CherryProjects/rbac
장점: Express 지원

위 내용은 nodejs의 Express 건물 허가 관리 시스템에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.