이 글에서는 권한 관리 시스템을 구축하기 위한 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. 사용자 로그인
4. 사용자 수정
6. 세부 정보(사용자 권한 목록 포함)
9. 사용자 역할 가져오기
resources
1. 리소스 트리 저장(이 방법을 추가, 수정 및 삭제)
/api/acl_resource/addArray 参数: { list:JSON.stringify(nodeList) } 返回值: { code:"200", msg:"创建成功!" }
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 }
/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:"退出成功!" }
/api/acl_user/add 参数: { name:xxx, account:xxx, password:xxx } 返回值: { code:"200", msg:"创建成功!", result:data.save }
/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 오픈 소스 권한 관리 프레임워크 참조:
장점: express 지원
댓글: Express를 지원하려면 Passport.js도 도입해야 합니다
rbac(별 309개): https://github.com/CherryProjects/rbac
장점: Express 지원
위 내용은 nodejs의 Express 건물 허가 관리 시스템에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!