@nocobase/plugin-acl 0.13.0-alpha.1 → 0.13.0-alpha.10
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.
- package/dist/client/index.js +1 -11
- package/dist/index.js +37 -16
- package/dist/server/actions/available-actions.js +26 -4
- package/dist/server/actions/role-check.js +26 -4
- package/dist/server/actions/role-collections.js +28 -6
- package/dist/server/actions/user-setDefaultRole.js +26 -4
- package/dist/server/collections/roles-users.js +22 -4
- package/dist/server/collections/roles.js +22 -4
- package/dist/server/collections/rolesResources.js +22 -4
- package/dist/server/collections/rolesResourcesActions.js +22 -4
- package/dist/server/collections/rolesResourcesScopes.js +22 -4
- package/dist/server/collections/users.js +24 -7
- package/dist/server/index.js +33 -11
- package/dist/server/middlewares/setCurrentRole.js +26 -4
- package/dist/server/migrations/20221214072638-set-role-snippets.js +24 -7
- package/dist/server/model/RoleModel.js +28 -7
- package/dist/server/model/RoleResourceActionModel.js +28 -7
- package/dist/server/model/RoleResourceModel.js +33 -12
- package/dist/server/server.js +129 -73
- package/dist/swagger/index.js +22 -4
- package/package.json +3 -2
package/dist/client/index.js
CHANGED
|
@@ -1,11 +1 @@
|
|
|
1
|
-
(function(
|
|
2
|
-
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("@nocobase/client")) : typeof define === "function" && define.amd ? define(["exports", "@nocobase/client"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["@nocobase/plugin-acl"] = {}, global["@nocobase/client"]));
|
|
3
|
-
})(this, function(exports2, client) {
|
|
4
|
-
"use strict";
|
|
5
|
-
class AclPlugin extends client.Plugin {
|
|
6
|
-
async load() {
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
exports2.default = AclPlugin;
|
|
10
|
-
Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
11
|
-
});
|
|
1
|
+
(function(e,n){typeof exports=="object"&&typeof module!="undefined"?n(exports,require("@nocobase/client")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client"],n):(e=typeof globalThis!="undefined"?globalThis:e||self,n(e["@nocobase/plugin-acl"]={},e["@nocobase/client"]))})(this,function(e,n){"use strict";var c=(e,n,o)=>new Promise((u,l)=>{var d=i=>{try{t(o.next(i))}catch(s){l(s)}},f=i=>{try{t(o.throw(i))}catch(s){l(s)}},t=i=>i.done?u(i.value):Promise.resolve(i.value).then(d,f);t((o=o.apply(e,n)).next())});class o extends n.Plugin{load(){return c(this,null,function*(){})}}e.default=o,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var src_exports = {};
|
|
30
|
+
__export(src_exports, {
|
|
31
|
+
default: () => import_server.default
|
|
12
32
|
});
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
33
|
+
module.exports = __toCommonJS(src_exports);
|
|
34
|
+
__reExport(src_exports, require("./server"), module.exports);
|
|
35
|
+
var import_server = __toESM(require("./server"));
|
|
36
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
37
|
+
0 && (module.exports = {
|
|
38
|
+
...require("./server")
|
|
18
39
|
});
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var available_actions_exports = {};
|
|
19
|
+
__export(available_actions_exports, {
|
|
20
|
+
availableActionResource: () => availableActionResource
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(available_actions_exports);
|
|
3
23
|
const availableActionResource = {
|
|
4
24
|
name: "availableActions",
|
|
5
25
|
actions: {
|
|
@@ -16,5 +36,7 @@ const availableActionResource = {
|
|
|
16
36
|
}
|
|
17
37
|
}
|
|
18
38
|
};
|
|
19
|
-
|
|
20
|
-
exports
|
|
39
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
40
|
+
0 && (module.exports = {
|
|
41
|
+
availableActionResource
|
|
42
|
+
});
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var role_check_exports = {};
|
|
19
|
+
__export(role_check_exports, {
|
|
20
|
+
checkAction: () => checkAction
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(role_check_exports);
|
|
3
23
|
const map2obj = (map) => {
|
|
4
24
|
const obj = {};
|
|
5
25
|
for (const [key, value] of map) {
|
|
@@ -41,5 +61,7 @@ async function checkAction(ctx, next) {
|
|
|
41
61
|
};
|
|
42
62
|
await next();
|
|
43
63
|
}
|
|
44
|
-
|
|
45
|
-
exports
|
|
64
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
65
|
+
0 && (module.exports = {
|
|
66
|
+
checkAction
|
|
67
|
+
});
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var role_collections_exports = {};
|
|
19
|
+
__export(role_collections_exports, {
|
|
20
|
+
roleCollectionsResource: () => roleCollectionsResource
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(role_collections_exports);
|
|
3
23
|
function totalPage(total, pageSize) {
|
|
4
24
|
return Math.ceil(total / pageSize);
|
|
5
25
|
}
|
|
@@ -11,7 +31,7 @@ const roleCollectionsResource = {
|
|
|
11
31
|
const { page = 1, pageSize = 20 } = ctx.action.params;
|
|
12
32
|
const db = ctx.db;
|
|
13
33
|
const collectionRepository = db.getRepository("collections");
|
|
14
|
-
db.getRepository("fields");
|
|
34
|
+
const fieldRepository = db.getRepository("fields");
|
|
15
35
|
const [collections, count] = await collectionRepository.findAndCount({
|
|
16
36
|
filter: ctx.action.params.filter,
|
|
17
37
|
sort: "sort"
|
|
@@ -26,7 +46,7 @@ const roleCollectionsResource = {
|
|
|
26
46
|
const items = collections.map((collection, i) => {
|
|
27
47
|
const exists = roleResourcesNames.includes(collection.get("name"));
|
|
28
48
|
const usingConfig = roleResourceActionResourceNames.includes(collection.get("name")) ? "resourceAction" : "strategy";
|
|
29
|
-
db.getCollection(collection.get("name"));
|
|
49
|
+
const c = db.getCollection(collection.get("name"));
|
|
30
50
|
return {
|
|
31
51
|
type: "collection",
|
|
32
52
|
name: collection.get("name"),
|
|
@@ -49,5 +69,7 @@ const roleCollectionsResource = {
|
|
|
49
69
|
}
|
|
50
70
|
}
|
|
51
71
|
};
|
|
52
|
-
|
|
53
|
-
exports
|
|
72
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
73
|
+
0 && (module.exports = {
|
|
74
|
+
roleCollectionsResource
|
|
75
|
+
});
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var user_setDefaultRole_exports = {};
|
|
19
|
+
__export(user_setDefaultRole_exports, {
|
|
20
|
+
setDefaultRole: () => setDefaultRole
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(user_setDefaultRole_exports);
|
|
3
23
|
async function setDefaultRole(ctx, next) {
|
|
4
24
|
const {
|
|
5
25
|
values: { roleName }
|
|
@@ -39,5 +59,7 @@ async function setDefaultRole(ctx, next) {
|
|
|
39
59
|
ctx.body = "ok";
|
|
40
60
|
await next();
|
|
41
61
|
}
|
|
42
|
-
|
|
43
|
-
exports
|
|
62
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
+
0 && (module.exports = {
|
|
64
|
+
setDefaultRole
|
|
65
|
+
});
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var roles_users_exports = {};
|
|
19
|
+
__export(roles_users_exports, {
|
|
20
|
+
default: () => roles_users_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(roles_users_exports);
|
|
3
23
|
var roles_users_default = {
|
|
4
24
|
name: "rolesUsers",
|
|
5
25
|
duplicator: "optional",
|
|
6
26
|
namespace: "acl.acl",
|
|
7
27
|
fields: [{ type: "boolean", name: "default" }]
|
|
8
28
|
};
|
|
9
|
-
|
|
10
|
-
module.exports = roles_users_default;
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var roles_exports = {};
|
|
19
|
+
__export(roles_exports, {
|
|
20
|
+
default: () => roles_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(roles_exports);
|
|
3
23
|
var roles_default = {
|
|
4
24
|
namespace: "acl.acl",
|
|
5
25
|
duplicator: {
|
|
@@ -99,5 +119,3 @@ var roles_default = {
|
|
|
99
119
|
}
|
|
100
120
|
]
|
|
101
121
|
};
|
|
102
|
-
|
|
103
|
-
module.exports = roles_default;
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var rolesResources_exports = {};
|
|
19
|
+
__export(rolesResources_exports, {
|
|
20
|
+
default: () => rolesResources_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(rolesResources_exports);
|
|
3
23
|
var rolesResources_default = {
|
|
4
24
|
namespace: "acl.acl",
|
|
5
25
|
duplicator: "required",
|
|
@@ -31,5 +51,3 @@ var rolesResources_default = {
|
|
|
31
51
|
}
|
|
32
52
|
]
|
|
33
53
|
};
|
|
34
|
-
|
|
35
|
-
module.exports = rolesResources_default;
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var rolesResourcesActions_exports = {};
|
|
19
|
+
__export(rolesResourcesActions_exports, {
|
|
20
|
+
default: () => rolesResourcesActions_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(rolesResourcesActions_exports);
|
|
3
23
|
var rolesResourcesActions_default = {
|
|
4
24
|
namespace: "acl.acl",
|
|
5
25
|
duplicator: "required",
|
|
@@ -29,5 +49,3 @@ var rolesResourcesActions_default = {
|
|
|
29
49
|
}
|
|
30
50
|
]
|
|
31
51
|
};
|
|
32
|
-
|
|
33
|
-
module.exports = rolesResourcesActions_default;
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var rolesResourcesScopes_exports = {};
|
|
19
|
+
__export(rolesResourcesScopes_exports, {
|
|
20
|
+
default: () => rolesResourcesScopes_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(rolesResourcesScopes_exports);
|
|
3
23
|
var rolesResourcesScopes_default = {
|
|
4
24
|
namespace: "acl.acl",
|
|
5
25
|
duplicator: "required",
|
|
@@ -23,5 +43,3 @@ var rolesResourcesScopes_default = {
|
|
|
23
43
|
}
|
|
24
44
|
]
|
|
25
45
|
};
|
|
26
|
-
|
|
27
|
-
module.exports = rolesResourcesScopes_default;
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var users_exports = {};
|
|
19
|
+
__export(users_exports, {
|
|
20
|
+
default: () => users_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(users_exports);
|
|
23
|
+
var import_database = require("@nocobase/database");
|
|
24
|
+
var users_default = (0, import_database.extend)({
|
|
6
25
|
name: "users",
|
|
7
26
|
fields: [
|
|
8
27
|
{
|
|
@@ -31,5 +50,3 @@ var users_default = database.extend({
|
|
|
31
50
|
}
|
|
32
51
|
]
|
|
33
52
|
});
|
|
34
|
-
|
|
35
|
-
module.exports = users_default;
|
package/dist/server/index.js
CHANGED
|
@@ -1,11 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var server_exports = {};
|
|
29
|
+
__export(server_exports, {
|
|
30
|
+
default: () => import_server.default
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(server_exports);
|
|
33
|
+
var import_server = __toESM(require("./server"));
|
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var setCurrentRole_exports = {};
|
|
19
|
+
__export(setCurrentRole_exports, {
|
|
20
|
+
setCurrentRole: () => setCurrentRole
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(setCurrentRole_exports);
|
|
3
23
|
async function setCurrentRole(ctx, next) {
|
|
4
24
|
var _a, _b;
|
|
5
25
|
const currentRole = ctx.get("X-Role");
|
|
@@ -27,5 +47,7 @@ async function setCurrentRole(ctx, next) {
|
|
|
27
47
|
}
|
|
28
48
|
await next();
|
|
29
49
|
}
|
|
30
|
-
|
|
31
|
-
exports
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
setCurrentRole
|
|
53
|
+
});
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var set_role_snippets_exports = {};
|
|
19
|
+
__export(set_role_snippets_exports, {
|
|
20
|
+
default: () => set_role_snippets_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(set_role_snippets_exports);
|
|
23
|
+
var import_server = require("@nocobase/server");
|
|
24
|
+
class set_role_snippets_default extends import_server.Migration {
|
|
6
25
|
async up() {
|
|
7
26
|
const result = await this.app.version.satisfies("<0.9.3-alpha.1");
|
|
8
27
|
if (!result) {
|
|
@@ -21,5 +40,3 @@ class set_role_snippets_default extends server.Migration {
|
|
|
21
40
|
async down() {
|
|
22
41
|
}
|
|
23
42
|
}
|
|
24
|
-
|
|
25
|
-
module.exports = set_role_snippets_default;
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var RoleModel_exports = {};
|
|
19
|
+
__export(RoleModel_exports, {
|
|
20
|
+
RoleModel: () => RoleModel
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(RoleModel_exports);
|
|
23
|
+
var import_database = require("@nocobase/database");
|
|
24
|
+
class RoleModel extends import_database.Model {
|
|
6
25
|
writeToAcl(options) {
|
|
7
26
|
const { acl } = options;
|
|
8
27
|
const roleName = this.get("name");
|
|
@@ -19,5 +38,7 @@ class RoleModel extends database.Model {
|
|
|
19
38
|
role.snippets = new Set(this.get("snippets"));
|
|
20
39
|
}
|
|
21
40
|
}
|
|
22
|
-
|
|
23
|
-
exports
|
|
41
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
42
|
+
0 && (module.exports = {
|
|
43
|
+
RoleModel
|
|
44
|
+
});
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var RoleResourceActionModel_exports = {};
|
|
19
|
+
__export(RoleResourceActionModel_exports, {
|
|
20
|
+
RoleResourceActionModel: () => RoleResourceActionModel
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(RoleResourceActionModel_exports);
|
|
23
|
+
var import_database = require("@nocobase/database");
|
|
24
|
+
class RoleResourceActionModel extends import_database.Model {
|
|
6
25
|
async writeToACL(options) {
|
|
7
26
|
var _a;
|
|
8
27
|
const db = this.constructor.database;
|
|
@@ -60,5 +79,7 @@ class RoleResourceActionModel extends database.Model {
|
|
|
60
79
|
}
|
|
61
80
|
}
|
|
62
81
|
}
|
|
63
|
-
|
|
64
|
-
exports
|
|
82
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
83
|
+
0 && (module.exports = {
|
|
84
|
+
RoleResourceActionModel
|
|
85
|
+
});
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var RoleResourceModel_exports = {};
|
|
19
|
+
__export(RoleResourceModel_exports, {
|
|
20
|
+
RoleResourceModel: () => RoleResourceModel
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(RoleResourceModel_exports);
|
|
23
|
+
var import_acl = require("@nocobase/acl");
|
|
24
|
+
var import_database = require("@nocobase/database");
|
|
25
|
+
class RoleResourceModel extends import_database.Model {
|
|
7
26
|
async revoke(options) {
|
|
8
27
|
const { role, resourceName, grantHelper } = options;
|
|
9
28
|
role.revokeResource(resourceName);
|
|
@@ -20,10 +39,10 @@ class RoleResourceModel extends database.Model {
|
|
|
20
39
|
grantHelper.resourceTargetActionMap.set(`${role.name}.${resourceName}`, []);
|
|
21
40
|
}
|
|
22
41
|
async writeToACL(options) {
|
|
23
|
-
const { acl
|
|
42
|
+
const { acl, associationFieldsActions, grantHelper } = options;
|
|
24
43
|
const resourceName = this.get("name");
|
|
25
44
|
const roleName = this.get("roleName");
|
|
26
|
-
const role = acl
|
|
45
|
+
const role = acl.getRole(roleName);
|
|
27
46
|
if (!role) {
|
|
28
47
|
console.log(`${roleName} role does not exist`);
|
|
29
48
|
return;
|
|
@@ -32,7 +51,7 @@ class RoleResourceModel extends database.Model {
|
|
|
32
51
|
if (this.usingActionsConfig === false) {
|
|
33
52
|
return;
|
|
34
53
|
}
|
|
35
|
-
const resource = new
|
|
54
|
+
const resource = new import_acl.ACLResource({
|
|
36
55
|
role,
|
|
37
56
|
name: resourceName
|
|
38
57
|
});
|
|
@@ -42,7 +61,7 @@ class RoleResourceModel extends database.Model {
|
|
|
42
61
|
});
|
|
43
62
|
for (const action of actions) {
|
|
44
63
|
await action.writeToACL({
|
|
45
|
-
acl
|
|
64
|
+
acl,
|
|
46
65
|
role,
|
|
47
66
|
resourceName,
|
|
48
67
|
associationFieldsActions,
|
|
@@ -51,5 +70,7 @@ class RoleResourceModel extends database.Model {
|
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
72
|
}
|
|
54
|
-
|
|
55
|
-
exports
|
|
73
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
74
|
+
0 && (module.exports = {
|
|
75
|
+
RoleResourceModel
|
|
76
|
+
});
|
package/dist/server/server.js
CHANGED
|
@@ -1,33 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var server_exports = {};
|
|
29
|
+
__export(server_exports, {
|
|
30
|
+
GrantHelper: () => GrantHelper,
|
|
31
|
+
PluginACL: () => PluginACL,
|
|
32
|
+
default: () => server_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(server_exports);
|
|
35
|
+
var import_acl = require("@nocobase/acl");
|
|
36
|
+
var import_actions = require("@nocobase/actions");
|
|
37
|
+
var import_database = require("@nocobase/database");
|
|
38
|
+
var import_server = require("@nocobase/server");
|
|
39
|
+
var import_lodash = __toESM(require("lodash"));
|
|
40
|
+
var import_path = require("path");
|
|
41
|
+
var import_available_actions = require("./actions/available-actions");
|
|
42
|
+
var import_role_check = require("./actions/role-check");
|
|
43
|
+
var import_role_collections = require("./actions/role-collections");
|
|
44
|
+
var import_user_setDefaultRole = require("./actions/user-setDefaultRole");
|
|
45
|
+
var import_setCurrentRole = require("./middlewares/setCurrentRole");
|
|
46
|
+
var import_RoleModel = require("./model/RoleModel");
|
|
47
|
+
var import_RoleResourceActionModel = require("./model/RoleResourceActionModel");
|
|
48
|
+
var import_RoleResourceModel = require("./model/RoleResourceModel");
|
|
49
|
+
var import_async_mutex = require("async-mutex");
|
|
24
50
|
class GrantHelper {
|
|
25
51
|
resourceTargetActionMap = /* @__PURE__ */ new Map();
|
|
26
52
|
targetActionResourceMap = /* @__PURE__ */ new Map();
|
|
27
53
|
constructor() {
|
|
28
54
|
}
|
|
29
55
|
}
|
|
30
|
-
class PluginACL extends
|
|
56
|
+
class PluginACL extends import_server.Plugin {
|
|
31
57
|
// association field actions config
|
|
32
58
|
associationFieldsActions = {};
|
|
33
59
|
grantHelper = new GrantHelper();
|
|
@@ -123,15 +149,15 @@ class PluginACL extends server.Plugin {
|
|
|
123
149
|
async beforeLoad() {
|
|
124
150
|
this.db.addMigrations({
|
|
125
151
|
namespace: this.name,
|
|
126
|
-
directory:
|
|
152
|
+
directory: (0, import_path.resolve)(__dirname, "./migrations"),
|
|
127
153
|
context: {
|
|
128
154
|
plugin: this
|
|
129
155
|
}
|
|
130
156
|
});
|
|
131
157
|
this.app.db.registerModels({
|
|
132
|
-
RoleResourceActionModel:
|
|
133
|
-
RoleResourceModel:
|
|
134
|
-
RoleModel:
|
|
158
|
+
RoleResourceActionModel: import_RoleResourceActionModel.RoleResourceActionModel,
|
|
159
|
+
RoleResourceModel: import_RoleResourceModel.RoleResourceModel,
|
|
160
|
+
RoleModel: import_RoleModel.RoleModel
|
|
135
161
|
});
|
|
136
162
|
this.app.acl.registerSnippet({
|
|
137
163
|
name: `pm.${this.name}.roles`,
|
|
@@ -158,20 +184,20 @@ class PluginACL extends server.Plugin {
|
|
|
158
184
|
if (actionName == "view" || actionName == "export") {
|
|
159
185
|
const associationsFields = fieldsParams.filter((fieldName) => {
|
|
160
186
|
const field = collection.getField(fieldName);
|
|
161
|
-
return field instanceof
|
|
187
|
+
return field instanceof import_database.RelationField;
|
|
162
188
|
});
|
|
163
189
|
ctx.params = {
|
|
164
190
|
...ctx.params,
|
|
165
|
-
fields:
|
|
191
|
+
fields: import_lodash.default.difference(fieldsParams, associationsFields),
|
|
166
192
|
appends: associationsFields
|
|
167
193
|
};
|
|
168
194
|
}
|
|
169
195
|
});
|
|
170
196
|
this.registerAssociationFieldsActions();
|
|
171
|
-
this.app.resourcer.define(
|
|
172
|
-
this.app.resourcer.define(
|
|
173
|
-
this.app.resourcer.registerActionHandler("roles:check",
|
|
174
|
-
this.app.resourcer.registerActionHandler(`users:setDefaultRole`,
|
|
197
|
+
this.app.resourcer.define(import_available_actions.availableActionResource);
|
|
198
|
+
this.app.resourcer.define(import_role_collections.roleCollectionsResource);
|
|
199
|
+
this.app.resourcer.registerActionHandler("roles:check", import_role_check.checkAction);
|
|
200
|
+
this.app.resourcer.registerActionHandler(`users:setDefaultRole`, import_user_setDefaultRole.setDefaultRole);
|
|
175
201
|
this.db.on("users.afterCreateWithAssociations", async (model, options) => {
|
|
176
202
|
const { transaction } = options;
|
|
177
203
|
const repository = this.app.db.getRepository("roles");
|
|
@@ -256,27 +282,30 @@ class PluginACL extends server.Plugin {
|
|
|
256
282
|
});
|
|
257
283
|
}
|
|
258
284
|
});
|
|
285
|
+
const mutex = new import_async_mutex.Mutex();
|
|
259
286
|
this.app.db.on("fields.afterDestroy", async (model, options) => {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
transaction: options.transaction
|
|
268
|
-
});
|
|
269
|
-
for (const resourceAction of resourceActions) {
|
|
270
|
-
const fields = resourceAction.get("fields");
|
|
271
|
-
const newFields = fields.filter((field) => field != fieldName);
|
|
272
|
-
await this.app.db.getRepository("rolesResourcesActions").update({
|
|
273
|
-
filterByTk: resourceAction.get("id"),
|
|
274
|
-
values: {
|
|
275
|
-
fields: newFields
|
|
287
|
+
await mutex.runExclusive(async () => {
|
|
288
|
+
const collectionName = model.get("collectionName");
|
|
289
|
+
const fieldName = model.get("name");
|
|
290
|
+
const resourceActions = await this.app.db.getRepository("rolesResourcesActions").find({
|
|
291
|
+
filter: {
|
|
292
|
+
"resource.name": collectionName,
|
|
293
|
+
"fields.$anyOf": [fieldName]
|
|
276
294
|
},
|
|
277
295
|
transaction: options.transaction
|
|
278
296
|
});
|
|
279
|
-
|
|
297
|
+
for (const resourceAction of resourceActions) {
|
|
298
|
+
const fields = resourceAction.get("fields");
|
|
299
|
+
const newFields = fields.filter((field) => field != fieldName);
|
|
300
|
+
await this.app.db.getRepository("rolesResourcesActions").update({
|
|
301
|
+
filterByTk: resourceAction.get("id"),
|
|
302
|
+
values: {
|
|
303
|
+
fields: newFields
|
|
304
|
+
},
|
|
305
|
+
transaction: options.transaction
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
});
|
|
280
309
|
});
|
|
281
310
|
const writeRolesToACL = async (app, options) => {
|
|
282
311
|
const exists = await this.app.db.collectionExistsInDb("roles");
|
|
@@ -358,7 +387,7 @@ class PluginACL extends server.Plugin {
|
|
|
358
387
|
]
|
|
359
388
|
});
|
|
360
389
|
});
|
|
361
|
-
this.app.resourcer.use(
|
|
390
|
+
this.app.resourcer.use(import_setCurrentRole.setCurrentRole, { tag: "setCurrentRole", before: "acl", after: "auth" });
|
|
362
391
|
this.app.acl.allow("users", "setDefaultRole", "loggedIn");
|
|
363
392
|
this.app.acl.allow("roles", "check", "loggedIn");
|
|
364
393
|
this.app.acl.allow("*", "*", (ctx) => {
|
|
@@ -435,9 +464,34 @@ class PluginACL extends server.Plugin {
|
|
|
435
464
|
return next();
|
|
436
465
|
});
|
|
437
466
|
const parseJsonTemplate = this.app.acl.parseJsonTemplate;
|
|
467
|
+
this.app.acl.beforeGrantAction(async (ctx) => {
|
|
468
|
+
const actionName = this.app.acl.resolveActionAlias(ctx.actionName);
|
|
469
|
+
if (import_lodash.default.isPlainObject(ctx.params)) {
|
|
470
|
+
if (actionName === "view" && ctx.params.fields) {
|
|
471
|
+
const appendFields = [];
|
|
472
|
+
const collection = this.app.db.getCollection(ctx.resourceName);
|
|
473
|
+
if (!collection) {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (collection.model.primaryKeyAttribute) {
|
|
477
|
+
appendFields.push(collection.model.primaryKeyAttribute);
|
|
478
|
+
}
|
|
479
|
+
if (collection.model.rawAttributes["createdAt"]) {
|
|
480
|
+
appendFields.push("createdAt");
|
|
481
|
+
}
|
|
482
|
+
if (collection.model.rawAttributes["updatedAt"]) {
|
|
483
|
+
appendFields.push("updatedAt");
|
|
484
|
+
}
|
|
485
|
+
ctx.params = {
|
|
486
|
+
...import_lodash.default.omit(ctx.params, "fields"),
|
|
487
|
+
fields: [...ctx.params.fields, ...appendFields]
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
});
|
|
438
492
|
this.app.acl.use(
|
|
439
493
|
async (ctx, next) => {
|
|
440
|
-
var _a, _b, _c
|
|
494
|
+
var _a, _b, _c;
|
|
441
495
|
const { actionName, resourceName, resourceOf } = ctx.action;
|
|
442
496
|
if (resourceName.includes(".") && resourceOf) {
|
|
443
497
|
if (!((_b = (_a = ctx == null ? void 0 : ctx.permission) == null ? void 0 : _a.can) == null ? void 0 : _b.params)) {
|
|
@@ -454,10 +508,11 @@ class PluginACL extends server.Plugin {
|
|
|
454
508
|
ctx.permission.can = false;
|
|
455
509
|
}
|
|
456
510
|
} else {
|
|
457
|
-
const
|
|
511
|
+
const filteredParams = this.app.acl.filterParams(ctx, collectionName, (action == null ? void 0 : action.params) || {});
|
|
512
|
+
const params = await parseJsonTemplate(filteredParams, ctx);
|
|
458
513
|
const sourceInstance = await ctx.db.getRepository(collectionName).findOne({
|
|
459
514
|
filterByTk: resourceOf,
|
|
460
|
-
filter
|
|
515
|
+
filter: params.filter || {}
|
|
461
516
|
});
|
|
462
517
|
if (!sourceInstance) {
|
|
463
518
|
ctx.permission.can = false;
|
|
@@ -475,7 +530,7 @@ class PluginACL extends server.Plugin {
|
|
|
475
530
|
var _a, _b;
|
|
476
531
|
const action = (_b = (_a = ctx.permission) == null ? void 0 : _a.can) == null ? void 0 : _b.action;
|
|
477
532
|
if (action == "destroy" && !ctx.action.resourceName.includes(".")) {
|
|
478
|
-
const repository =
|
|
533
|
+
const repository = import_actions.utils.getRepositoryFromParams(ctx);
|
|
479
534
|
const filteredCount = await repository.count(ctx.permission.mergedParams);
|
|
480
535
|
const queryCount = await repository.count(ctx.permission.rawParams);
|
|
481
536
|
if (queryCount > filteredCount) {
|
|
@@ -507,9 +562,9 @@ class PluginACL extends server.Plugin {
|
|
|
507
562
|
const Model = collection.model;
|
|
508
563
|
const primaryKeyField = Model.primaryKeyField || Model.primaryKeyAttribute;
|
|
509
564
|
const dataPath = ((_a = ctx.body) == null ? void 0 : _a.rows) ? "body.rows" : "body";
|
|
510
|
-
let listData =
|
|
565
|
+
let listData = import_lodash.default.get(ctx, dataPath);
|
|
511
566
|
if (actionName == "get") {
|
|
512
|
-
listData =
|
|
567
|
+
listData = import_lodash.default.castArray(listData);
|
|
513
568
|
}
|
|
514
569
|
const inspectActions = ["view", "update", "destroy"];
|
|
515
570
|
const actionsParams = [];
|
|
@@ -540,13 +595,13 @@ class PluginACL extends server.Plugin {
|
|
|
540
595
|
},
|
|
541
596
|
permission: {},
|
|
542
597
|
throw(...args) {
|
|
543
|
-
throw new
|
|
598
|
+
throw new import_acl.NoPermissionError(...args);
|
|
544
599
|
}
|
|
545
600
|
};
|
|
546
601
|
try {
|
|
547
602
|
await this.app.acl.getActionParams(actionCtx);
|
|
548
603
|
} catch (e) {
|
|
549
|
-
if (e instanceof
|
|
604
|
+
if (e instanceof import_acl.NoPermissionError) {
|
|
550
605
|
continue;
|
|
551
606
|
}
|
|
552
607
|
throw e;
|
|
@@ -572,7 +627,7 @@ class PluginACL extends server.Plugin {
|
|
|
572
627
|
if (!params) {
|
|
573
628
|
continue;
|
|
574
629
|
}
|
|
575
|
-
if (
|
|
630
|
+
if (import_lodash.default.isEmpty(params) || import_lodash.default.isEmpty(params.filter)) {
|
|
576
631
|
allAllowed.push(action);
|
|
577
632
|
continue;
|
|
578
633
|
}
|
|
@@ -592,7 +647,7 @@ class PluginACL extends server.Plugin {
|
|
|
592
647
|
return key.startsWith("$") && key.endsWith("$");
|
|
593
648
|
};
|
|
594
649
|
const iterate = (rootObj, path = []) => {
|
|
595
|
-
const obj = path.length == 0 ? rootObj :
|
|
650
|
+
const obj = path.length == 0 ? rootObj : import_lodash.default.get(rootObj, path);
|
|
596
651
|
if (Array.isArray(obj)) {
|
|
597
652
|
for (let i = 0; i < obj.length; i++) {
|
|
598
653
|
if (obj[i] === null) {
|
|
@@ -611,16 +666,16 @@ class PluginACL extends server.Plugin {
|
|
|
611
666
|
if (typeof obj[key] === "object" && obj[key] !== null || typeof obj[key] === "symbol") {
|
|
612
667
|
iterate(rootObj, [...path, key]);
|
|
613
668
|
}
|
|
614
|
-
if (typeof key === "string" && key !==
|
|
669
|
+
if (typeof key === "string" && key !== (0, import_database.snakeCase)(key)) {
|
|
615
670
|
const setKey = isAssociationKey(key) ? (() => {
|
|
616
671
|
const parts = key.split(".");
|
|
617
|
-
parts[parts.length - 1] =
|
|
672
|
+
parts[parts.length - 1] = import_lodash.default.snakeCase(parts[parts.length - 1]);
|
|
618
673
|
const result = parts.join(".");
|
|
619
674
|
return result.endsWith("$") ? result : `${result}$`;
|
|
620
|
-
})() :
|
|
621
|
-
const setValue =
|
|
622
|
-
|
|
623
|
-
|
|
675
|
+
})() : (0, import_database.snakeCase)(key);
|
|
676
|
+
const setValue = import_lodash.default.cloneDeep(obj[key]);
|
|
677
|
+
import_lodash.default.unset(rootObj, [...path, key]);
|
|
678
|
+
import_lodash.default.set(rootObj, [...path, setKey], setValue);
|
|
624
679
|
}
|
|
625
680
|
});
|
|
626
681
|
};
|
|
@@ -688,7 +743,7 @@ class PluginACL extends server.Plugin {
|
|
|
688
743
|
}
|
|
689
744
|
}
|
|
690
745
|
async load() {
|
|
691
|
-
await this.importCollections(
|
|
746
|
+
await this.importCollections((0, import_path.resolve)(__dirname, "collections"));
|
|
692
747
|
this.db.extendCollection({
|
|
693
748
|
name: "rolesUischemas",
|
|
694
749
|
namespace: "acl.acl",
|
|
@@ -697,7 +752,8 @@ class PluginACL extends server.Plugin {
|
|
|
697
752
|
}
|
|
698
753
|
}
|
|
699
754
|
var server_default = PluginACL;
|
|
700
|
-
|
|
701
|
-
exports
|
|
702
|
-
|
|
703
|
-
|
|
755
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
756
|
+
0 && (module.exports = {
|
|
757
|
+
GrantHelper,
|
|
758
|
+
PluginACL
|
|
759
|
+
});
|
package/dist/swagger/index.js
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var swagger_exports = {};
|
|
19
|
+
__export(swagger_exports, {
|
|
20
|
+
default: () => swagger_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(swagger_exports);
|
|
3
23
|
var swagger_default = {
|
|
4
24
|
openapi: "3.0.2",
|
|
5
25
|
info: {
|
|
@@ -373,5 +393,3 @@ var swagger_default = {
|
|
|
373
393
|
}
|
|
374
394
|
}
|
|
375
395
|
};
|
|
376
|
-
|
|
377
|
-
module.exports = swagger_default;
|
package/package.json
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
"displayName.zh-CN": "权限控制",
|
|
5
5
|
"description": "A simple access control based on roles, resources and actions",
|
|
6
6
|
"description.zh-CN": "基于角色、资源和操作的权限控制。",
|
|
7
|
-
"version": "0.13.0-alpha.
|
|
7
|
+
"version": "0.13.0-alpha.10",
|
|
8
8
|
"license": "AGPL-3.0",
|
|
9
9
|
"main": "./dist/server/index.js",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@types/jsonwebtoken": "^8.5.8",
|
|
12
|
+
"async-mutex": "^0.4.0",
|
|
12
13
|
"jsonwebtoken": "^8.5.1",
|
|
13
14
|
"react": "^18.2.0",
|
|
14
15
|
"react-dom": "^18.2.0"
|
|
@@ -27,5 +28,5 @@
|
|
|
27
28
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
28
29
|
"directory": "packages/plugins/acl"
|
|
29
30
|
},
|
|
30
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "5360ed81650f6895f3ed39aede2706467d55862c"
|
|
31
32
|
}
|