@soratani-code/samtools 1.3.3 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,14 @@
1
- export type UserPermission = Record<string, string[]>;
1
+ export type UserPermission = Record<string, number[]>;
2
2
  type Auth = {
3
3
  resource: string | RegExp;
4
- actions?: string[];
4
+ actions?: number[];
5
5
  };
6
6
  export interface AuthParams {
7
7
  requiredPermissions?: Array<Auth>;
8
8
  oneOfPerm?: boolean;
9
9
  }
10
+ export declare function filterPermission(code: number, permissions: number[]): number[];
11
+ export declare function perm(...nums: number[]): number;
12
+ export declare function permissionCompute(resources: Record<string, number>, permissions: Record<string, number>): Record<string, string[]>;
10
13
  export declare function permission(params: AuthParams, userPermission: UserPermission): boolean;
11
14
  export {};
package/lib/permission.js CHANGED
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.permission = void 0;
3
+ exports.permission = exports.permissionCompute = exports.perm = exports.filterPermission = void 0;
4
+ const lodash_1 = require("lodash");
4
5
  const judge = (actions, perm) => {
5
6
  if (!perm || !perm.length) {
6
7
  return false;
7
8
  }
8
- if (perm.join('') === '*') {
9
- return true;
10
- }
11
9
  return actions.every((action) => perm.includes(action));
12
10
  };
13
11
  const auth = (params, userPermission) => {
@@ -26,6 +24,44 @@ const auth = (params, userPermission) => {
26
24
  const perm = userPermission[resource];
27
25
  return judge(actions, perm);
28
26
  };
27
+ function reversePermissionBinary(code) {
28
+ return code.split('').reverse().join('');
29
+ }
30
+ function binary(num) {
31
+ return num.toString(2);
32
+ }
33
+ function filterPermission(code, permissions) {
34
+ const bina = binary(code);
35
+ function diff(target, source) {
36
+ return target && target == source || !source;
37
+ }
38
+ function equality(target, source) {
39
+ const tar = reversePermissionBinary(target);
40
+ const sou = reversePermissionBinary(source);
41
+ return (0, lodash_1.every)(sou, (i, index) => diff(Number(tar[index]), Number(i)));
42
+ }
43
+ return (0, lodash_1.filter)(permissions, (i) => equality(bina, binary(i)));
44
+ }
45
+ exports.filterPermission = filterPermission;
46
+ function perm(...nums) {
47
+ return (0, lodash_1.reduce)(nums, (pre, n) => pre | n, 0);
48
+ }
49
+ exports.perm = perm;
50
+ function permissionCompute(resources, permissions) {
51
+ const permValues = Object.values(resources);
52
+ const resources_maps = Object.entries(resources);
53
+ const permissions_maps = Object.entries(permissions);
54
+ return (0, lodash_1.reduce)(permissions_maps, (pre, item) => {
55
+ const [key, code] = item;
56
+ pre[key] = (0, lodash_1.map)(filterPermission(code, permValues), (i) => {
57
+ const item = (0, lodash_1.find)(resources_maps, o => o[1] === i);
58
+ const perm = (0, lodash_1.get)(item, '0');
59
+ return perm;
60
+ }).filter(Boolean);
61
+ return pre;
62
+ }, {});
63
+ }
64
+ exports.permissionCompute = permissionCompute;
29
65
  function permission(params, userPermission) {
30
66
  const { requiredPermissions, oneOfPerm } = params;
31
67
  if (Array.isArray(requiredPermissions) && requiredPermissions.length) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soratani-code/samtools",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
4
4
  "description": "",
5
5
  "typings": "lib/index.d.ts",
6
6
  "main": "lib/index.js",