使用 BigInt 进行权限管理

This commit is contained in:
undefined committed 2020-07-14 22:03:54 +08:00
1 parent eaed0e84f5
commit 8aef05a375
17 files changed
+252 -197

No files matched your search

+5 -5
View File
@@ -4,7 +4,7 @@ import { PERM, PRIV } from '../model/builtin';
global.Hydro.ui.nav = [];
const trueChecker = () => true;
const Checker = (perm: string, priv: number, checker: Function = trueChecker) => (handler) => (
const Checker = (perm: bigint, priv: number, checker: Function = trueChecker) => (handler) => (
checker(handler)
&& (perm ? handler.user.hasPerm(perm) : true)
&& (priv ? handler.user.hasPriv(priv) : true)
@@ -12,10 +12,10 @@ const Checker = (perm: string, priv: number, checker: Function = trueChecker) =>
const Item = (
name: string, args: any, prefix: string,
...permPrivChecker: Array<number | string | Function | Array<number | string>>
...permPrivChecker: Array<number | bigint | Function | Array<bigint | string>>
) => {
let _priv: number;
let _perm: string;
let _perm: bigint;
let checker: Function = trueChecker;
for (const item of permPrivChecker) {
if (item instanceof Object && !isNull(item)) {
@@ -23,7 +23,7 @@ const Item = (
if (typeof item[0] === 'number') {
// @ts-ignore
_priv = item;
} else if (typeof item[0] === 'string') {
} else if (typeof item[0] === 'bigint') {
// @ts-ignore
_perm = item;
}
@@ -32,7 +32,7 @@ const Item = (
}
} else if (typeof item === 'number') {
_priv = item;
} else if (typeof item === 'string') {
} else if (typeof item === 'bigint') {
_perm = item;
}
}
+2
View File
@@ -1,5 +1,6 @@
import fs from 'fs';
import path from 'path';
import serialize from 'serialize-javascript';
import nunjucks from 'nunjucks';
import * as markdown from './markdown';
import { STATUS, PERM, PRIV } from '../model/builtin';
@@ -33,6 +34,7 @@ class Nunjucks extends nunjucks.Environment {
constructor() {
super(new Loader(), { autoescape: true, trimBlocks: true });
this.addFilter('json', (self) => JSON.stringify(self), false);
this.addFilter('serialize', (self, ignoreFunction = true) => serialize(self, { ignoreFunction }));
this.addFilter('assign', (self, data) => Object.assign(self, data));
this.addFilter('markdown', (self, safe = true) => {
if (safe) return markdown.safe.render(self);