Skip to content

Latest commit

 

History

History
93 lines (76 loc) · 2.27 KB

README.zh-CN.md

File metadata and controls

93 lines (76 loc) · 2.27 KB

egg-rbac-example

example for egg-rbac plugin

本地体验

$ npm i
$ npm run dev
$ open http://localhost:7001/

egg-rabc 基础配置

  1. 安装插件 js # npm i --save egg-rbac
  2. 启用插件
// {app_root}/config/plugin.js
exports.rbac = {
  enable: true,
  package: 'egg-rbac',
};
  1. 插件配置(更多信息查看config.default.js)
  config.rbac = {
    initOnStart: true, // default false
    /**
     * @param {object} ctx - egg context object
     * @return {object} promise, if resolve data is falsy, no role
     */
    async getRoleName(ctx) {
      if (ctx.session.user && ctx.session.user.role.name) {
        return Promise.resolve(ctx.session.user.role.name);
      }
      return Promise.resolve('');
    },
  };
  1. 配置权限列表和初始角色信息
// {app_root/config/rbac.js}
'use strict';

exports.permissions = [
  // action_resource
  { name: '/admin', alias: '访问文章管理' },
];

exports.roles = [
  { name: 'user', alias: '普通用户', grants: [ '/admin', '/admin/tag', '/admin/collect' ] },
];

egg-rbac 使用说明

产生 context 实例 Role 对象

配置中的 getRoleName 函数用于返回当前用户的角色名称,egg-rbac 内部中间件通过调用 getRoleName 获得角色名称后创建 Role 对象,并且绑定到 context(ctx) 上面。

权限判断

  1. 通过默认提供的中间件方法进行判断处理
app.get('/admin', app.rbac.can('query_admin'), 'home.index');
  1. 自定义中间件,请参考本项目代码

  2. 调用 ctx.role.can() 进行判断

ctx.role.can('/admin');

角色创建及修改角色权限

app.rbac 对象上面有通用方法用于创建角色、修改角色权限

例子:

//{app_root/app/controller/home.js}
const role = await app.rbac.newRole({ name: body.name, alias: body.alias, grants: [] });
if (body.removeArr && body.removeArr.length > 0) {
  await app.rbac.removePermissions(body.id, body.removeArr);
}
if (body.addArr && body.addArr.length > 0) {
  await app.rbac.addPermission(body.id, body.addArr);
}