项目作者: libotony

项目描述 :
node access control module with mysql
高级语言: JavaScript
项目地址: git://github.com/libotony/node-authority.git
创建时间: 2016-07-06T03:58:08Z
项目社区:https://github.com/libotony/node-authority

开源协议:

下载


权限控制模块

要求

  • 用户id需要存储在req.session.uid中。
  • 数据库使用mysql
  • 数据库中需要有四个表tb_authority、tb_role、tb_map、tb_admin

数据库表说明

表字段可以自由扩展,如下列出的字段不可更改

  1. CREATE TABLE tb_authority(
  2. auth_id bigint unsigned PRIMARY KEY AUTO_INCREMENT #id,主键,自增
  3. , name varchar(40) not null unique #权限名
  4. , code varchar(40) not null unique #权限代码
  5. , description varchar(80) not null default '' #描述
  6. )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  7. CREATE TABLE tb_role(
  8. role_id bigint unsigned PRIMARY KEY AUTO_INCREMENT #id,主键,自增
  9. , name varchar(40) not null unique #角色名
  10. , description varchar(80) not null default '' #描述
  11. , authority varchar(1000) not null default '[]' #类别权限 数组的json字符串
  12. )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  13. CREATE TABLE tb_map( #管理员-权限组关系表
  14. roleid bigint unsigned NOT NULL #tb_role name
  15. , adminid bigint unsigned NOT NULL #tb_admin id
  16. )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  17. CREATE TABLE tb_admin( #管理表
  18. admin_id bigint unsigned PRIMARY KEY AUTO_INCREMENT #id,主键,自增
  19. , username varchar(50) NOT NULL DEFAULT '' UNIQUE #adminname
  20. , realname varchar(50) NOT NULL #姓名,必填
  21. , password varchar(80) NOT NULL #登录密码,必填
  22. , disabled tinyint NOT NULL DEFAULT 0 #是否停封,默认否
  23. , adminlevel TINYINT unsigned NOT NULL DEFAULT 1 #账户等级0,1,2,3,...
  24. , authority varchar(1000) NOT NULL default '[]' #类别权限 数组的json字符串
  25. , description varchar(200) NOT NULL DEFAULT '' #描述
  26. )AUTO_INCREMENT=30001 ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

安装

  1. npm install node-authroity --save

或者在package.json中加入如下字段

  1. "node-authority": "^0.1.0"

初始化

  1. var express = require('express');
  2. var cookieParser = require('cookie-parser');
  3. var redisSession = require('node-redis-session');
  4. var app = express();
  5. //cookie and session parser
  6. app.use(cookieParser());
  7. app.use(redisSession());
  8. // hang middleware after session middleware
  9. var authority = require('node-authority');
  10. // configure authority
  11. var dbinfo = {
  12. 'host' : 'localhost',
  13. 'port' : 3306,
  14. 'user' : 'user',
  15. 'password' : 'password',
  16. 'database' : 'database'
  17. };
  18. authority.configure({mysql:dbinfo});
  19. app.use(authority.authMiddleWare);
  20. app.listen(3000);

权限举例说明

tb_authority.name为人类易读的权限名称,一般会作为检查权限时传入的参数,tb_authority.code为程序储存时的权限名称。tb_admin.authoritytb_role.authority为权限存储字段,存储方式为JSON.stringify()过后的数组。

API列表

check(permission)

  1. /**
  2. * 检查当前用户是否拥有当前指定权限(传入参数)
  3. * 挂载到res.loacls下方便在页面渲染时使用
  4. */
  5. req.check('Home.View');
  6. res.locals.check('Home.View');