nodejs acl的用户权限管理详解

2020-06-17 06:43:35易采站长站整理

说明

Q: 这个工具用来做什么的呢

A: 用户有不同的权限,比如管理员,vip,普通用户,每个用户对应访问api,页面都不一样

nodejs有两个比较有名的权限管理模块 一个是acl 一个是rbac 综合对比了一下最终在做项目的时候选择了acl

功能列表:

addUserRoles //给某用户添加角色
removeUserRoles //移除某用户角色
userRoles //获取某用户所有角色
roleUsers //获取所有是此角色的用户
hasRole // 某用户是否是某角色
addRoleParents //给某角色增加父角色
removeRoleParents //移除某觉得的某父角色或所有父角色
removeRole //移除某角色
removeResource //移除某资源
allow //给某些角色增加某些资源的某些权限
removeAllow //移除某些角色的某些资源的某些权限
allowedPermissions //查询某人的所有资源及其权限
isAllowed //查询某人是否有某资源的某权限
areAnyRolesAllowed //查询某角色是否有某资源的某权限
whatResources //查询某角色有哪些资源
middleware //middleware for express
backend //指定方式(mongo/redis…)

ACL名词及其主要方法

roles 角色

removeRole
addRoleParents
allow
removeAllow

resources 资源

whatResources
removeResource

permissions 权限

users 用户

allowedPermissions
isAllowed
addUserRoles
removeUserRoles
userRoles
roleUsers
hasRole
areAnyRolesAllowed

使用方法

建立起配置文件
用户登录后分配相应的权限
需要控制的地方使用acl做校检

配置文件


const Acl = require('acl');
const aclConfig = require('../conf/acl_conf');

module.exports = function (app, express) {
const acl = new Acl(new Acl.memoryBackend()); // eslint-disable-line

acl.allow(aclConfig);

return acl;
};

// acl_conf

module.exports = [
{
roles: 'normal', // 一般用户
allows: [
{ resources: ['/admin/reserve'], permissions: ['get'] },
] },
{
roles: 'member', // 会员
allows: [
{ resources: ['/admin/reserve', '/admin/sign'], permissions: ['get'] },
{ resources: ['/admin/reserve/add-visitor', '/admin/reserve/add-visitor-excel', '/admin/reserve/audit', '/admin/sign/ban'], permissions: ['post'] },
] },
{
roles: 'admin', // 管理
allows: [
{ resources: ['/admin/reserve', '/admin/sign', '/admin/set'], permissions: ['get'] },
{ resources: ['/admin/set/add-user', '/admin/set/modify-user'], permissions: ['post'] },
] },
{
roles: 'root', // 最高权限
allows: [
{ resources: ['/admin/reserve', '/admin/sign', '/admin/set'], permissions: ['get'] },