@kyro-cms/core 0.10.3 → 0.10.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.
- package/dist/api-handler-graphql.cjs +1 -49
- package/dist/api-handler-graphql.js +1 -46
- package/dist/api-handler-trpc.cjs +1 -38
- package/dist/api-handler-trpc.js +1 -36
- package/dist/api-handler.cjs +1 -44
- package/dist/api-handler.js +1 -27
- package/dist/bootstrap-IVQWSJXZ.js +1 -0
- package/dist/bootstrap-OHGQGMRV.cjs +1 -0
- package/dist/chunk-2BTRHVT3.cjs +20 -0
- package/dist/chunk-2W4FK6CJ.js +122 -0
- package/dist/chunk-4ORJMSJU.cjs +1 -0
- package/dist/chunk-5J6HXUF6.js +1 -0
- package/dist/chunk-65G73T7Z.cjs +2 -0
- package/dist/chunk-6CLRVJPP.cjs +133 -0
- package/dist/chunk-7N6NKCRT.js +1 -0
- package/dist/chunk-7WOX27LK.js +259 -0
- package/dist/chunk-AE6GXUT7.js +1 -0
- package/dist/chunk-AHSFSERC.cjs +1 -0
- package/dist/chunk-AJAZ7D3W.cjs +259 -0
- package/dist/chunk-ATLSIYRH.cjs +1 -0
- package/dist/chunk-AU6IWTBO.js +2 -0
- package/dist/chunk-CIE3XMLH.cjs +2 -0
- package/dist/chunk-CVVW4LXZ.cjs +1 -0
- package/dist/chunk-DV4LFLPL.cjs +1 -0
- package/dist/chunk-ELICKLFM.cjs +3 -0
- package/dist/chunk-EQUQJBPP.cjs +2 -0
- package/dist/chunk-ET6NN2V2.cjs +122 -0
- package/dist/chunk-F3Z67QWS.cjs +86 -0
- package/dist/chunk-F7SR5IDT.cjs +1 -0
- package/dist/chunk-FO3HLBC7.js +1 -0
- package/dist/chunk-G6A7OSIG.js +2 -0
- package/dist/chunk-GFU7AOI3.cjs +1 -0
- package/dist/chunk-GYQMNXXW.cjs +114 -0
- package/dist/chunk-HLSB2MCK.js +1 -0
- package/dist/chunk-HVXO3OFB.cjs +1 -0
- package/dist/chunk-ISWMETHJ.cjs +1 -0
- package/dist/chunk-K6WUOU6P.js +1 -0
- package/dist/chunk-KDNYHLD2.js +1 -0
- package/dist/chunk-L6CZYN3L.cjs +20 -0
- package/dist/chunk-LZ6YFYQM.js +20 -0
- package/dist/chunk-MIOMMB23.cjs +1 -0
- package/dist/chunk-MSSRVZH6.js +1 -0
- package/dist/chunk-NGBJKZMT.js +90 -0
- package/dist/chunk-NRLIGDYF.js +1 -0
- package/dist/chunk-NY47CFVP.cjs +1 -0
- package/dist/chunk-NZ35PV5R.js +2 -0
- package/dist/chunk-OG7CNQGU.js +1 -0
- package/dist/chunk-P7CESLDJ.js +1 -0
- package/dist/chunk-POWTSLKC.js +21 -0
- package/dist/chunk-PP5S2UBV.js +0 -0
- package/dist/chunk-PWGS2GPI.js +86 -0
- package/dist/chunk-Q3Q7BJVQ.cjs +1 -0
- package/dist/chunk-Q4CSLXCO.cjs +90 -0
- package/dist/chunk-QRXDCV6K.js +0 -0
- package/dist/chunk-R6UUTH3T.js +2 -0
- package/dist/chunk-RHCWCG3O.js +114 -0
- package/dist/chunk-SL3LZQCF.js +1 -0
- package/dist/chunk-TD6RULJU.cjs +21 -0
- package/dist/chunk-UBHFUFD4.cjs +1 -0
- package/dist/chunk-UBRYJP2G.js +1 -0
- package/dist/chunk-UDSJGML2.cjs +2 -0
- package/dist/chunk-UHFDH3PG.js +20 -0
- package/dist/chunk-UJNSOOYZ.cjs +1 -0
- package/dist/chunk-UVTS2IWM.js +1 -0
- package/dist/chunk-V65NPSR5.cjs +1 -0
- package/dist/chunk-VKXQUYYV.js +133 -0
- package/dist/chunk-WIZ6C5QZ.cjs +1 -0
- package/dist/chunk-Y7K26TBA.cjs +1 -0
- package/dist/chunk-ZAQOSRP6.js +1 -0
- package/dist/chunk-ZELCS7IC.js +3 -0
- package/dist/cli/index.cjs +35 -405
- package/dist/cli/index.js +35 -402
- package/dist/client.cjs +1 -55
- package/dist/client.js +1 -6
- package/dist/drizzle/index.cjs +1 -50
- package/dist/drizzle/index.d.cts +1 -2
- package/dist/drizzle/index.d.ts +1 -2
- package/dist/drizzle/index.js +1 -9
- package/dist/fields/index.cjs +1 -89
- package/dist/fields/index.js +1 -4
- package/dist/graphql/index.cjs +1 -31
- package/dist/graphql/index.d.cts +1 -1
- package/dist/graphql/index.d.ts +1 -1
- package/dist/graphql/index.js +1 -6
- package/dist/{index-jLs0zlft.d.ts → index-DXr33e0x.d.ts} +1 -1
- package/dist/{index-DHbywDs-.d.cts → index-DuuUzWBq.d.cts} +1 -1
- package/dist/index.cjs +29 -2464
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +29 -1929
- package/dist/integration.cjs +1 -10
- package/dist/integration.js +1 -4
- package/dist/media-L5XDD47D.js +1 -0
- package/dist/media-OUBQTIQP.cjs +1 -0
- package/dist/mongo-auth-adapter-LG5O4LIH.js +1 -0
- package/dist/mongo-auth-adapter-YPONSOCY.cjs +1 -0
- package/dist/mongodb/index.cjs +1 -29
- package/dist/mongodb/index.d.cts +1 -2
- package/dist/mongodb/index.d.ts +1 -2
- package/dist/mongodb/index.js +1 -8
- package/dist/postgres-auth-adapter-33QOIRXT.js +1 -0
- package/dist/postgres-auth-adapter-JKDYYULH.cjs +1 -0
- package/dist/redis-adapter-KECGVSVX.cjs +1 -0
- package/dist/redis-adapter-VAXP43GR.js +1 -0
- package/dist/rest/index.cjs +1 -31
- package/dist/rest/index.d.cts +1 -1
- package/dist/rest/index.d.ts +1 -1
- package/dist/rest/index.js +1 -18
- package/dist/schema-HIUSHSUI.cjs +1 -0
- package/dist/schema-KFYUM674.js +1 -0
- package/dist/sqlite-adapter-FP45QCYK.js +1 -0
- package/dist/sqlite-adapter-Z3IBBI4X.cjs +1 -0
- package/dist/templates/index.cjs +1 -207
- package/dist/templates/index.js +1 -6
- package/dist/trpc/index.cjs +1 -48
- package/dist/trpc/index.js +1 -7
- package/dist/ws/index.cjs +1 -25
- package/dist/ws/index.js +1 -4
- package/package.json +49 -12
- package/dist/api-handler-graphql.cjs.map +0 -1
- package/dist/api-handler-graphql.js.map +0 -1
- package/dist/api-handler-trpc.cjs.map +0 -1
- package/dist/api-handler-trpc.js.map +0 -1
- package/dist/api-handler.cjs.map +0 -1
- package/dist/api-handler.js.map +0 -1
- package/dist/bootstrap-FUAPY2OF.cjs +0 -32
- package/dist/bootstrap-FUAPY2OF.cjs.map +0 -1
- package/dist/bootstrap-OXNVM7FP.js +0 -7
- package/dist/bootstrap-OXNVM7FP.js.map +0 -1
- package/dist/chunk-2HFJUUFZ.js +0 -250
- package/dist/chunk-2HFJUUFZ.js.map +0 -1
- package/dist/chunk-354ISGA4.js +0 -6457
- package/dist/chunk-354ISGA4.js.map +0 -1
- package/dist/chunk-3AKCVYDB.js +0 -162
- package/dist/chunk-3AKCVYDB.js.map +0 -1
- package/dist/chunk-3KTWGODI.cjs +0 -178
- package/dist/chunk-3KTWGODI.cjs.map +0 -1
- package/dist/chunk-3P5AHK2U.cjs +0 -2749
- package/dist/chunk-3P5AHK2U.cjs.map +0 -1
- package/dist/chunk-3YELQL7Z.cjs +0 -4
- package/dist/chunk-3YELQL7Z.cjs.map +0 -1
- package/dist/chunk-4CV4JOE5.js +0 -24
- package/dist/chunk-4CV4JOE5.js.map +0 -1
- package/dist/chunk-4OCMVGEY.cjs +0 -173
- package/dist/chunk-4OCMVGEY.cjs.map +0 -1
- package/dist/chunk-4PWRCMTQ.cjs +0 -15
- package/dist/chunk-4PWRCMTQ.cjs.map +0 -1
- package/dist/chunk-526M5MOA.js +0 -103
- package/dist/chunk-526M5MOA.js.map +0 -1
- package/dist/chunk-53NYVYVX.js +0 -3243
- package/dist/chunk-53NYVYVX.js.map +0 -1
- package/dist/chunk-5GFQPHGT.cjs +0 -156
- package/dist/chunk-5GFQPHGT.cjs.map +0 -1
- package/dist/chunk-5RPRLTTN.js +0 -861
- package/dist/chunk-5RPRLTTN.js.map +0 -1
- package/dist/chunk-7OGPN7MP.js +0 -352
- package/dist/chunk-7OGPN7MP.js.map +0 -1
- package/dist/chunk-7OS7TX2Q.cjs +0 -495
- package/dist/chunk-7OS7TX2Q.cjs.map +0 -1
- package/dist/chunk-ADLJSJSN.cjs +0 -13
- package/dist/chunk-ADLJSJSN.cjs.map +0 -1
- package/dist/chunk-AN2L2CJZ.js +0 -2728
- package/dist/chunk-AN2L2CJZ.js.map +0 -1
- package/dist/chunk-BYBMTIMT.js +0 -419
- package/dist/chunk-BYBMTIMT.js.map +0 -1
- package/dist/chunk-CF7OL6HR.js +0 -355
- package/dist/chunk-CF7OL6HR.js.map +0 -1
- package/dist/chunk-CJX74IYK.js +0 -489
- package/dist/chunk-CJX74IYK.js.map +0 -1
- package/dist/chunk-CKVOU6MX.cjs +0 -52
- package/dist/chunk-CKVOU6MX.cjs.map +0 -1
- package/dist/chunk-CZLDE2OZ.cjs +0 -28
- package/dist/chunk-CZLDE2OZ.cjs.map +0 -1
- package/dist/chunk-DPA3KWPY.cjs +0 -205
- package/dist/chunk-DPA3KWPY.cjs.map +0 -1
- package/dist/chunk-EEJUFDMF.cjs +0 -424
- package/dist/chunk-EEJUFDMF.cjs.map +0 -1
- package/dist/chunk-FIAMXNTH.js +0 -220
- package/dist/chunk-FIAMXNTH.js.map +0 -1
- package/dist/chunk-GAOXD3XT.js +0 -175
- package/dist/chunk-GAOXD3XT.js.map +0 -1
- package/dist/chunk-GTGRLD4Y.js +0 -3
- package/dist/chunk-GTGRLD4Y.js.map +0 -1
- package/dist/chunk-GUUB5EAG.cjs +0 -223
- package/dist/chunk-GUUB5EAG.cjs.map +0 -1
- package/dist/chunk-GXFOGU7N.cjs +0 -359
- package/dist/chunk-GXFOGU7N.cjs.map +0 -1
- package/dist/chunk-GYIJ3JJM.cjs +0 -1069
- package/dist/chunk-GYIJ3JJM.cjs.map +0 -1
- package/dist/chunk-GZS4LMR7.js +0 -422
- package/dist/chunk-GZS4LMR7.js.map +0 -1
- package/dist/chunk-HY6B7B5A.js +0 -150
- package/dist/chunk-HY6B7B5A.js.map +0 -1
- package/dist/chunk-IDVRRRAK.cjs +0 -824
- package/dist/chunk-IDVRRRAK.cjs.map +0 -1
- package/dist/chunk-ISKYUUP4.cjs +0 -6486
- package/dist/chunk-ISKYUUP4.cjs.map +0 -1
- package/dist/chunk-KC2GDBLS.cjs +0 -84
- package/dist/chunk-KC2GDBLS.cjs.map +0 -1
- package/dist/chunk-L4EZKIEX.js +0 -185
- package/dist/chunk-L4EZKIEX.js.map +0 -1
- package/dist/chunk-LNTFRAHF.cjs +0 -473
- package/dist/chunk-LNTFRAHF.cjs.map +0 -1
- package/dist/chunk-MTIRYI7F.cjs +0 -4
- package/dist/chunk-MTIRYI7F.cjs.map +0 -1
- package/dist/chunk-N4GN6Q3V.cjs +0 -869
- package/dist/chunk-N4GN6Q3V.cjs.map +0 -1
- package/dist/chunk-N4H37VN4.cjs +0 -259
- package/dist/chunk-N4H37VN4.cjs.map +0 -1
- package/dist/chunk-N5QSHUA6.js +0 -1135
- package/dist/chunk-N5QSHUA6.js.map +0 -1
- package/dist/chunk-NKPKR5BW.cjs +0 -188
- package/dist/chunk-NKPKR5BW.cjs.map +0 -1
- package/dist/chunk-NQJJYRLP.cjs +0 -110
- package/dist/chunk-NQJJYRLP.cjs.map +0 -1
- package/dist/chunk-OJ2AM75W.cjs +0 -253
- package/dist/chunk-OJ2AM75W.cjs.map +0 -1
- package/dist/chunk-OX6GOIPH.js +0 -516
- package/dist/chunk-OX6GOIPH.js.map +0 -1
- package/dist/chunk-P2YW545G.js +0 -11
- package/dist/chunk-P2YW545G.js.map +0 -1
- package/dist/chunk-PHJRNPHY.cjs +0 -3291
- package/dist/chunk-PHJRNPHY.cjs.map +0 -1
- package/dist/chunk-Q72BOAPK.js +0 -817
- package/dist/chunk-Q72BOAPK.js.map +0 -1
- package/dist/chunk-QU2RFFH4.js +0 -3
- package/dist/chunk-QU2RFFH4.js.map +0 -1
- package/dist/chunk-RP7VZUEL.js +0 -49
- package/dist/chunk-RP7VZUEL.js.map +0 -1
- package/dist/chunk-SHTTJMLT.cjs +0 -361
- package/dist/chunk-SHTTJMLT.cjs.map +0 -1
- package/dist/chunk-THBQG64D.cjs +0 -425
- package/dist/chunk-THBQG64D.cjs.map +0 -1
- package/dist/chunk-TQG7G7YI.cjs +0 -526
- package/dist/chunk-TQG7G7YI.cjs.map +0 -1
- package/dist/chunk-U3VVLYXG.cjs +0 -189
- package/dist/chunk-U3VVLYXG.cjs.map +0 -1
- package/dist/chunk-UUDTPZX6.js +0 -193
- package/dist/chunk-UUDTPZX6.js.map +0 -1
- package/dist/chunk-VKREAIBA.cjs +0 -1139
- package/dist/chunk-VKREAIBA.cjs.map +0 -1
- package/dist/chunk-WDTTHKDS.js +0 -458
- package/dist/chunk-WDTTHKDS.js.map +0 -1
- package/dist/chunk-WXVB364T.js +0 -218
- package/dist/chunk-WXVB364T.js.map +0 -1
- package/dist/chunk-X4BPPD6K.js +0 -181
- package/dist/chunk-X4BPPD6K.js.map +0 -1
- package/dist/chunk-XEB7PH2E.js +0 -81
- package/dist/chunk-XEB7PH2E.js.map +0 -1
- package/dist/chunk-XHAAAEXX.js +0 -1055
- package/dist/chunk-XHAAAEXX.js.map +0 -1
- package/dist/chunk-YT7HXXVN.js +0 -13
- package/dist/chunk-YT7HXXVN.js.map +0 -1
- package/dist/cli/index.cjs.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/drizzle/index.cjs.map +0 -1
- package/dist/drizzle/index.js.map +0 -1
- package/dist/fields/index.cjs.map +0 -1
- package/dist/fields/index.js.map +0 -1
- package/dist/graphql/index.cjs.map +0 -1
- package/dist/graphql/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integration.cjs.map +0 -1
- package/dist/integration.js.map +0 -1
- package/dist/media-7WDX4BDJ.js +0 -4
- package/dist/media-7WDX4BDJ.js.map +0 -1
- package/dist/media-TUSLVRQ6.cjs +0 -17
- package/dist/media-TUSLVRQ6.cjs.map +0 -1
- package/dist/mongo-auth-adapter-GT4S7SCU.cjs +0 -17
- package/dist/mongo-auth-adapter-GT4S7SCU.cjs.map +0 -1
- package/dist/mongo-auth-adapter-M7VV4LNB.js +0 -4
- package/dist/mongo-auth-adapter-M7VV4LNB.js.map +0 -1
- package/dist/mongodb/index.cjs.map +0 -1
- package/dist/mongodb/index.js.map +0 -1
- package/dist/postgres-auth-adapter-AFAPISH7.js +0 -5
- package/dist/postgres-auth-adapter-AFAPISH7.js.map +0 -1
- package/dist/postgres-auth-adapter-SFDTLONT.cjs +0 -14
- package/dist/postgres-auth-adapter-SFDTLONT.cjs.map +0 -1
- package/dist/redis-adapter-UQX4EE3B.cjs +0 -13
- package/dist/redis-adapter-UQX4EE3B.cjs.map +0 -1
- package/dist/redis-adapter-XALOGWY3.js +0 -4
- package/dist/redis-adapter-XALOGWY3.js.map +0 -1
- package/dist/rest/index.cjs.map +0 -1
- package/dist/rest/index.js.map +0 -1
- package/dist/schema-6QL3USNB.cjs +0 -67
- package/dist/schema-6QL3USNB.cjs.map +0 -1
- package/dist/schema-FNNWEAAW.js +0 -6
- package/dist/schema-FNNWEAAW.js.map +0 -1
- package/dist/sqlite-adapter-AQB5TCGV.cjs +0 -13
- package/dist/sqlite-adapter-AQB5TCGV.cjs.map +0 -1
- package/dist/sqlite-adapter-N5H6IM2X.js +0 -4
- package/dist/sqlite-adapter-N5H6IM2X.js.map +0 -1
- package/dist/templates/index.cjs.map +0 -1
- package/dist/templates/index.js.map +0 -1
- package/dist/trpc/index.cjs.map +0 -1
- package/dist/trpc/index.js.map +0 -1
- package/dist/ws/index.cjs.map +0 -1
- package/dist/ws/index.js.map +0 -1
package/dist/chunk-KC2GDBLS.cjs
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/templates/auth.ts
|
|
4
|
-
var usersCollection = {
|
|
5
|
-
slug: "users",
|
|
6
|
-
label: "Users",
|
|
7
|
-
fields: [
|
|
8
|
-
{ name: "name", type: "text", label: "Name" },
|
|
9
|
-
{ name: "email", type: "email", required: true },
|
|
10
|
-
{
|
|
11
|
-
name: "passwordHash",
|
|
12
|
-
type: "text",
|
|
13
|
-
label: "Password Hash",
|
|
14
|
-
admin: { hidden: true }
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: "role",
|
|
18
|
-
type: "select",
|
|
19
|
-
options: [
|
|
20
|
-
{ label: "Super Admin", value: "super_admin" },
|
|
21
|
-
{ label: "Admin", value: "admin" },
|
|
22
|
-
{ label: "Editor", value: "editor" },
|
|
23
|
-
{ label: "Author", value: "author" },
|
|
24
|
-
{ label: "Customer", value: "customer" },
|
|
25
|
-
{ label: "Guest", value: "guest" }
|
|
26
|
-
],
|
|
27
|
-
required: true
|
|
28
|
-
},
|
|
29
|
-
{ name: "avatar", type: "upload", relationTo: "media", label: "Profile Picture" },
|
|
30
|
-
{ name: "tenantId", type: "text", label: "Tenant" },
|
|
31
|
-
{ name: "emailVerified", type: "checkbox", label: "Email Verified" },
|
|
32
|
-
{ name: "locked", type: "checkbox" },
|
|
33
|
-
{
|
|
34
|
-
name: "lastLogin",
|
|
35
|
-
type: "date",
|
|
36
|
-
time: true,
|
|
37
|
-
label: "Last Login",
|
|
38
|
-
admin: { readOnly: true }
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: "failedLoginAttempts",
|
|
42
|
-
type: "number",
|
|
43
|
-
label: "Failed Login Attempts",
|
|
44
|
-
admin: { readOnly: true }
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
timestamps: true,
|
|
48
|
-
admin: {
|
|
49
|
-
useAsTitle: "email",
|
|
50
|
-
defaultColumns: ["email", "role", "tenantId", "lastLogin"]
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
var auditLogsCollection = {
|
|
54
|
-
slug: "audit_logs",
|
|
55
|
-
label: "Audit Logs",
|
|
56
|
-
fields: [
|
|
57
|
-
{ name: "action", type: "text", required: true },
|
|
58
|
-
{ name: "userId", type: "text", label: "User ID" },
|
|
59
|
-
{ name: "userEmail", type: "email", label: "User Email" },
|
|
60
|
-
{ name: "role", type: "text" },
|
|
61
|
-
{ name: "resource", type: "text", label: "Resource" },
|
|
62
|
-
{ name: "ipAddress", type: "text", label: "IP Address" },
|
|
63
|
-
{ name: "success", type: "checkbox" },
|
|
64
|
-
{
|
|
65
|
-
name: "timestamp",
|
|
66
|
-
type: "date",
|
|
67
|
-
time: true,
|
|
68
|
-
required: true,
|
|
69
|
-
admin: { readOnly: true }
|
|
70
|
-
}
|
|
71
|
-
],
|
|
72
|
-
admin: {
|
|
73
|
-
defaultColumns: ["action", "userEmail", "resource", "success", "timestamp"]
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
var authCollections = {
|
|
77
|
-
users: usersCollection,
|
|
78
|
-
audit_logs: auditLogsCollection
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
exports.authCollections = authCollections;
|
|
82
|
-
exports.usersCollection = usersCollection;
|
|
83
|
-
//# sourceMappingURL=chunk-KC2GDBLS.cjs.map
|
|
84
|
-
//# sourceMappingURL=chunk-KC2GDBLS.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/templates/auth.ts"],"names":[],"mappings":"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","file":"chunk-KC2GDBLS.cjs","sourcesContent":["import type { CollectionConfig } from \"../registry/types.js\";\n\nexport const usersCollection: CollectionConfig = {\n slug: \"users\",\n label: \"Users\",\n fields: [\n { name: \"name\", type: \"text\", label: \"Name\" },\n { name: \"email\", type: \"email\", required: true },\n {\n name: \"passwordHash\",\n type: \"text\",\n label: \"Password Hash\",\n admin: { hidden: true },\n },\n {\n name: \"role\",\n type: \"select\",\n options: [\n { label: \"Super Admin\", value: \"super_admin\" },\n { label: \"Admin\", value: \"admin\" },\n { label: \"Editor\", value: \"editor\" },\n { label: \"Author\", value: \"author\" },\n { label: \"Customer\", value: \"customer\" },\n { label: \"Guest\", value: \"guest\" },\n ],\n required: true,\n },\n { name: \"avatar\", type: \"upload\", relationTo: \"media\", label: \"Profile Picture\" },\n { name: \"tenantId\", type: \"text\", label: \"Tenant\" },\n { name: \"emailVerified\", type: \"checkbox\", label: \"Email Verified\" },\n { name: \"locked\", type: \"checkbox\" },\n {\n name: \"lastLogin\",\n type: \"date\",\n time: true,\n label: \"Last Login\",\n admin: { readOnly: true },\n },\n {\n name: \"failedLoginAttempts\",\n type: \"number\",\n label: \"Failed Login Attempts\",\n admin: { readOnly: true },\n },\n ],\n timestamps: true,\n admin: {\n useAsTitle: \"email\",\n defaultColumns: [\"email\", \"role\", \"tenantId\", \"lastLogin\"],\n },\n};\n\nexport const auditLogsCollection: CollectionConfig = {\n slug: \"audit_logs\",\n label: \"Audit Logs\",\n fields: [\n { name: \"action\", type: \"text\", required: true },\n { name: \"userId\", type: \"text\", label: \"User ID\" },\n { name: \"userEmail\", type: \"email\", label: \"User Email\" },\n { name: \"role\", type: \"text\" },\n { name: \"resource\", type: \"text\", label: \"Resource\" },\n { name: \"ipAddress\", type: \"text\", label: \"IP Address\" },\n { name: \"success\", type: \"checkbox\" },\n {\n name: \"timestamp\",\n type: \"date\",\n time: true,\n required: true,\n admin: { readOnly: true },\n },\n ],\n admin: {\n defaultColumns: [\"action\", \"userEmail\", \"resource\", \"success\", \"timestamp\"],\n },\n};\n\nexport const authCollections = {\n users: usersCollection,\n audit_logs: auditLogsCollection,\n};\n"]}
|
package/dist/chunk-L4EZKIEX.js
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
// src/auth/rbac/roles.ts
|
|
2
|
-
var DEFAULT_ROLES = [
|
|
3
|
-
{
|
|
4
|
-
name: "super_admin",
|
|
5
|
-
level: 100,
|
|
6
|
-
inherits: [],
|
|
7
|
-
description: "Full system access across all tenants"
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
name: "admin",
|
|
11
|
-
level: 90,
|
|
12
|
-
inherits: ["editor"],
|
|
13
|
-
description: "Full tenant access with all content permissions"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
name: "editor",
|
|
17
|
-
level: 70,
|
|
18
|
-
inherits: ["author"],
|
|
19
|
-
description: "Edit and publish all content"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
name: "author",
|
|
23
|
-
level: 50,
|
|
24
|
-
inherits: ["customer"],
|
|
25
|
-
description: "Create and edit own content"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: "customer",
|
|
29
|
-
level: 30,
|
|
30
|
-
inherits: [],
|
|
31
|
-
description: "Access own data and make purchases"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
name: "guest",
|
|
35
|
-
level: 10,
|
|
36
|
-
inherits: [],
|
|
37
|
-
description: "Public read-only access"
|
|
38
|
-
}
|
|
39
|
-
];
|
|
40
|
-
var ROLE_PERMISSIONS = {
|
|
41
|
-
super_admin: ["*"],
|
|
42
|
-
admin: [
|
|
43
|
-
"users:admin",
|
|
44
|
-
"users:read",
|
|
45
|
-
"users:update",
|
|
46
|
-
"audit_logs:read",
|
|
47
|
-
"posts:admin",
|
|
48
|
-
"posts:read",
|
|
49
|
-
"posts:create",
|
|
50
|
-
"posts:update",
|
|
51
|
-
"posts:delete",
|
|
52
|
-
"pages:admin",
|
|
53
|
-
"pages:read",
|
|
54
|
-
"pages:create",
|
|
55
|
-
"pages:update",
|
|
56
|
-
"pages:delete",
|
|
57
|
-
"media:admin",
|
|
58
|
-
"media:read",
|
|
59
|
-
"media:create",
|
|
60
|
-
"media:update",
|
|
61
|
-
"media:delete",
|
|
62
|
-
"categories:admin",
|
|
63
|
-
"categories:read",
|
|
64
|
-
"categories:create",
|
|
65
|
-
"categories:update",
|
|
66
|
-
"categories:delete",
|
|
67
|
-
"products:admin",
|
|
68
|
-
"products:read",
|
|
69
|
-
"products:create",
|
|
70
|
-
"products:update",
|
|
71
|
-
"products:delete",
|
|
72
|
-
"orders:admin",
|
|
73
|
-
"orders:read",
|
|
74
|
-
"orders:update",
|
|
75
|
-
"customers:admin",
|
|
76
|
-
"customers:read",
|
|
77
|
-
"customers:update",
|
|
78
|
-
"coupons:admin",
|
|
79
|
-
"coupons:read",
|
|
80
|
-
"coupons:create",
|
|
81
|
-
"coupons:update",
|
|
82
|
-
"coupons:delete",
|
|
83
|
-
"navigation:admin",
|
|
84
|
-
"navigation:read",
|
|
85
|
-
"navigation:create",
|
|
86
|
-
"navigation:update",
|
|
87
|
-
"navigation:delete",
|
|
88
|
-
"settings:admin",
|
|
89
|
-
"settings:read",
|
|
90
|
-
"settings:update",
|
|
91
|
-
"profile:admin",
|
|
92
|
-
"profile:read",
|
|
93
|
-
"profile:update"
|
|
94
|
-
],
|
|
95
|
-
editor: [
|
|
96
|
-
"posts:admin",
|
|
97
|
-
"posts:read",
|
|
98
|
-
"posts:create",
|
|
99
|
-
"posts:update",
|
|
100
|
-
"posts:delete",
|
|
101
|
-
"pages:admin",
|
|
102
|
-
"pages:read",
|
|
103
|
-
"pages:create",
|
|
104
|
-
"pages:update",
|
|
105
|
-
"pages:delete",
|
|
106
|
-
"media:read",
|
|
107
|
-
"media:create",
|
|
108
|
-
"media:update",
|
|
109
|
-
"categories:read",
|
|
110
|
-
"categories:create",
|
|
111
|
-
"categories:update",
|
|
112
|
-
"products:read",
|
|
113
|
-
"orders:read",
|
|
114
|
-
"orders:update",
|
|
115
|
-
"navigation:read",
|
|
116
|
-
"navigation:create",
|
|
117
|
-
"navigation:update",
|
|
118
|
-
"profile:read",
|
|
119
|
-
"profile:update"
|
|
120
|
-
],
|
|
121
|
-
author: [
|
|
122
|
-
"posts:read",
|
|
123
|
-
"posts:create",
|
|
124
|
-
"posts:update",
|
|
125
|
-
"media:read",
|
|
126
|
-
"media:create",
|
|
127
|
-
"categories:read",
|
|
128
|
-
"profile:read",
|
|
129
|
-
"profile:update"
|
|
130
|
-
],
|
|
131
|
-
customer: ["profile:read", "profile:update", "orders:read", "orders:create"],
|
|
132
|
-
guest: ["posts:read", "pages:read", "products:read"]
|
|
133
|
-
};
|
|
134
|
-
function getRoleHierarchy(role, roles = DEFAULT_ROLES) {
|
|
135
|
-
const hierarchy = [role];
|
|
136
|
-
const roleMap = new Map(roles.map((r) => [r.name, r]));
|
|
137
|
-
const addInherited = (r) => {
|
|
138
|
-
const roleData = roleMap.get(r);
|
|
139
|
-
if (roleData && roleData.inherits) {
|
|
140
|
-
for (const inherited of roleData.inherits) {
|
|
141
|
-
if (!hierarchy.includes(inherited)) {
|
|
142
|
-
hierarchy.push(inherited);
|
|
143
|
-
addInherited(inherited);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
addInherited(role);
|
|
149
|
-
return hierarchy;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// src/auth/rbac/checker.ts
|
|
153
|
-
function hasPermission(user, permission, rolePermissions = ROLE_PERMISSIONS) {
|
|
154
|
-
if (!user || !user.role) return false;
|
|
155
|
-
const userPermissions = getUserPermissions(user, rolePermissions);
|
|
156
|
-
if (userPermissions.includes("*")) return true;
|
|
157
|
-
if (userPermissions.includes(permission)) return true;
|
|
158
|
-
const [resource, action] = permission.split(":");
|
|
159
|
-
if (userPermissions.includes(`${resource}:*`)) return true;
|
|
160
|
-
if (userPermissions.includes(`${resource}:admin`)) return true;
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
function hasAnyRole(user, checkRoles) {
|
|
164
|
-
if (!user || !user.role) return false;
|
|
165
|
-
const hierarchy = getRoleHierarchy(user.role);
|
|
166
|
-
return checkRoles.some((role) => hierarchy.includes(role));
|
|
167
|
-
}
|
|
168
|
-
function getUserPermissions(user, rolePermissions = ROLE_PERMISSIONS) {
|
|
169
|
-
if (!user || !user.role) return [];
|
|
170
|
-
const hierarchy = getRoleHierarchy(user.role);
|
|
171
|
-
const permissions = /* @__PURE__ */ new Set();
|
|
172
|
-
for (const role of hierarchy) {
|
|
173
|
-
const rolePerms = rolePermissions[role];
|
|
174
|
-
if (rolePerms) {
|
|
175
|
-
for (const perm of rolePerms) {
|
|
176
|
-
permissions.add(perm);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return Array.from(permissions);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export { hasAnyRole, hasPermission };
|
|
184
|
-
//# sourceMappingURL=chunk-L4EZKIEX.js.map
|
|
185
|
-
//# sourceMappingURL=chunk-L4EZKIEX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth/rbac/roles.ts","../src/auth/rbac/checker.ts"],"names":[],"mappings":"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","file":"chunk-L4EZKIEX.js","sourcesContent":["export interface Role {\n name: string;\n level: number;\n inherits: string[];\n description: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface Permission {\n resource: string;\n action: \"create\" | \"read\" | \"update\" | \"delete\" | \"admin\";\n conditions?: Condition[];\n}\n\nexport interface Condition {\n field: string;\n operator:\n | \"eq\"\n | \"neq\"\n | \"in\"\n | \"nin\"\n | \"gt\"\n | \"lt\"\n | \"gte\"\n | \"lte\"\n | \"contains\";\n value: any;\n}\n\nexport interface RolePermission {\n role: string;\n permissions: Permission[];\n}\n\nexport const DEFAULT_ROLES: Role[] = [\n {\n name: \"super_admin\",\n level: 100,\n inherits: [],\n description: \"Full system access across all tenants\",\n },\n {\n name: \"admin\",\n level: 90,\n inherits: [\"editor\"],\n description: \"Full tenant access with all content permissions\",\n },\n {\n name: \"editor\",\n level: 70,\n inherits: [\"author\"],\n description: \"Edit and publish all content\",\n },\n {\n name: \"author\",\n level: 50,\n inherits: [\"customer\"],\n description: \"Create and edit own content\",\n },\n {\n name: \"customer\",\n level: 30,\n inherits: [],\n description: \"Access own data and make purchases\",\n },\n {\n name: \"guest\",\n level: 10,\n inherits: [],\n description: \"Public read-only access\",\n },\n];\n\nexport const DEFAULT_PERMISSIONS: Permission[] = [\n { resource: \"users\", action: \"admin\" },\n { resource: \"users\", action: \"read\" },\n { resource: \"users\", action: \"create\" },\n { resource: \"users\", action: \"update\" },\n { resource: \"users\", action: \"delete\" },\n\n { resource: \"audit_logs\", action: \"admin\" },\n { resource: \"audit_logs\", action: \"read\" },\n\n { resource: \"posts\", action: \"admin\" },\n { resource: \"posts\", action: \"read\" },\n { resource: \"posts\", action: \"create\" },\n { resource: \"posts\", action: \"update\" },\n { resource: \"posts\", action: \"delete\" },\n\n { resource: \"pages\", action: \"admin\" },\n { resource: \"pages\", action: \"read\" },\n { resource: \"pages\", action: \"create\" },\n { resource: \"pages\", action: \"update\" },\n { resource: \"pages\", action: \"delete\" },\n\n { resource: \"media\", action: \"admin\" },\n { resource: \"media\", action: \"read\" },\n { resource: \"media\", action: \"create\" },\n { resource: \"media\", action: \"update\" },\n { resource: \"media\", action: \"delete\" },\n\n { resource: \"categories\", action: \"admin\" },\n { resource: \"categories\", action: \"read\" },\n { resource: \"categories\", action: \"create\" },\n { resource: \"categories\", action: \"update\" },\n { resource: \"categories\", action: \"delete\" },\n\n { resource: \"products\", action: \"admin\" },\n { resource: \"products\", action: \"read\" },\n { resource: \"products\", action: \"create\" },\n { resource: \"products\", action: \"update\" },\n { resource: \"products\", action: \"delete\" },\n\n { resource: \"orders\", action: \"admin\" },\n { resource: \"orders\", action: \"read\" },\n { resource: \"orders\", action: \"create\" },\n { resource: \"orders\", action: \"update\" },\n { resource: \"orders\", action: \"delete\" },\n\n { resource: \"customers\", action: \"admin\" },\n { resource: \"customers\", action: \"read\" },\n { resource: \"customers\", action: \"create\" },\n { resource: \"customers\", action: \"update\" },\n { resource: \"customers\", action: \"delete\" },\n\n { resource: \"coupons\", action: \"admin\" },\n { resource: \"coupons\", action: \"read\" },\n { resource: \"coupons\", action: \"create\" },\n { resource: \"coupons\", action: \"update\" },\n { resource: \"coupons\", action: \"delete\" },\n\n { resource: \"menu\", action: \"admin\" },\n { resource: \"menu\", action: \"read\" },\n { resource: \"menu\", action: \"create\" },\n { resource: \"menu\", action: \"update\" },\n { resource: \"menu\", action: \"delete\" },\n\n { resource: \"settings\", action: \"admin\" },\n { resource: \"settings\", action: \"read\" },\n { resource: \"settings\", action: \"update\" },\n\n { resource: \"profile\", action: \"admin\" },\n { resource: \"profile\", action: \"read\" },\n { resource: \"profile\", action: \"update\" },\n];\n\nexport const ROLE_PERMISSIONS: Record<string, string[]> = {\n super_admin: [\"*\"],\n\n admin: [\n \"users:admin\",\n \"users:read\",\n \"users:update\",\n \"audit_logs:read\",\n \"posts:admin\",\n \"posts:read\",\n \"posts:create\",\n \"posts:update\",\n \"posts:delete\",\n \"pages:admin\",\n \"pages:read\",\n \"pages:create\",\n \"pages:update\",\n \"pages:delete\",\n \"media:admin\",\n \"media:read\",\n \"media:create\",\n \"media:update\",\n \"media:delete\",\n \"categories:admin\",\n \"categories:read\",\n \"categories:create\",\n \"categories:update\",\n \"categories:delete\",\n \"products:admin\",\n \"products:read\",\n \"products:create\",\n \"products:update\",\n \"products:delete\",\n \"orders:admin\",\n \"orders:read\",\n \"orders:update\",\n \"customers:admin\",\n \"customers:read\",\n \"customers:update\",\n \"coupons:admin\",\n \"coupons:read\",\n \"coupons:create\",\n \"coupons:update\",\n \"coupons:delete\",\n \"navigation:admin\",\n \"navigation:read\",\n \"navigation:create\",\n \"navigation:update\",\n \"navigation:delete\",\n \"settings:admin\",\n \"settings:read\",\n \"settings:update\",\n \"profile:admin\",\n \"profile:read\",\n \"profile:update\",\n ],\n\n editor: [\n \"posts:admin\",\n \"posts:read\",\n \"posts:create\",\n \"posts:update\",\n \"posts:delete\",\n \"pages:admin\",\n \"pages:read\",\n \"pages:create\",\n \"pages:update\",\n \"pages:delete\",\n \"media:read\",\n \"media:create\",\n \"media:update\",\n \"categories:read\",\n \"categories:create\",\n \"categories:update\",\n \"products:read\",\n \"orders:read\",\n \"orders:update\",\n \"navigation:read\",\n \"navigation:create\",\n \"navigation:update\",\n \"profile:read\",\n \"profile:update\",\n ],\n\n author: [\n \"posts:read\",\n \"posts:create\",\n \"posts:update\",\n \"media:read\",\n \"media:create\",\n \"categories:read\",\n \"profile:read\",\n \"profile:update\",\n ],\n\n customer: [\"profile:read\", \"profile:update\", \"orders:read\", \"orders:create\"],\n\n guest: [\"posts:read\", \"pages:read\", \"products:read\"],\n};\n\nexport function getRoleHierarchy(\n role: string,\n roles: Role[] = DEFAULT_ROLES,\n): string[] {\n const hierarchy: string[] = [role];\n const roleMap = new Map(roles.map((r) => [r.name, r]));\n\n const addInherited = (r: string) => {\n const roleData = roleMap.get(r);\n if (roleData && roleData.inherits) {\n for (const inherited of roleData.inherits) {\n if (!hierarchy.includes(inherited)) {\n hierarchy.push(inherited);\n addInherited(inherited);\n }\n }\n }\n };\n\n addInherited(role);\n return hierarchy;\n}\n\nexport function getRoleLevel(\n role: string,\n roles: Role[] = DEFAULT_ROLES,\n): number {\n const roleMap = new Map(roles.map((r) => [r.name, r]));\n const roleData = roleMap.get(role);\n return roleData?.level ?? 0;\n}\n\nexport function isRoleHigherOrEqual(\n role1: string,\n role2: string,\n roles: Role[] = DEFAULT_ROLES,\n): boolean {\n return getRoleLevel(role1, roles) >= getRoleLevel(role2, roles);\n}\n\nexport function canInheritRole(\n role: string,\n targetRole: string,\n roles: Role[] = DEFAULT_ROLES,\n): boolean {\n const hierarchy = getRoleHierarchy(role, roles);\n return hierarchy.includes(targetRole);\n}\n","import type { AuthUser } from \"../types.js\";\nimport {\n ROLE_PERMISSIONS,\n getRoleHierarchy,\n type Permission,\n type Condition,\n} from \"./roles.js\";\n\nexport interface PermissionContext {\n user: AuthUser;\n resource?: string;\n action?: string;\n doc?: Record<string, any>;\n data?: Record<string, any>;\n tenantId?: string;\n}\n\nexport function hasPermission(\n user: AuthUser,\n permission: string,\n rolePermissions: Record<string, string[]> = ROLE_PERMISSIONS,\n): boolean {\n if (!user || !user.role) return false;\n\n const userPermissions = getUserPermissions(user, rolePermissions);\n\n if (userPermissions.includes(\"*\")) return true;\n if (userPermissions.includes(permission)) return true;\n\n const [resource, action] = permission.split(\":\");\n if (userPermissions.includes(`${resource}:*`)) return true;\n if (userPermissions.includes(`${resource}:admin`)) return true;\n\n return false;\n}\n\nexport function hasRole(\n user: AuthUser,\n role: string,\n roles: string[] = [],\n): boolean {\n if (!user || !user.role) return false;\n\n const hierarchy = getRoleHierarchy(user.role);\n return hierarchy.includes(role);\n}\n\nexport function hasAnyRole(user: AuthUser, checkRoles: string[]): boolean {\n if (!user || !user.role) return false;\n\n const hierarchy = getRoleHierarchy(user.role);\n return checkRoles.some((role) => hierarchy.includes(role));\n}\n\nexport function hasAllRoles(user: AuthUser, checkRoles: string[]): boolean {\n if (!user || !user.role) return false;\n\n const hierarchy = getRoleHierarchy(user.role);\n return checkRoles.every((role) => hierarchy.includes(role));\n}\n\nexport function getUserPermissions(\n user: AuthUser,\n rolePermissions: Record<string, string[]> = ROLE_PERMISSIONS,\n): string[] {\n if (!user || !user.role) return [];\n\n const hierarchy = getRoleHierarchy(user.role);\n const permissions = new Set<string>();\n\n for (const role of hierarchy) {\n const rolePerms = rolePermissions[role];\n if (rolePerms) {\n for (const perm of rolePerms) {\n permissions.add(perm);\n }\n }\n }\n\n return Array.from(permissions);\n}\n\nexport function getEffectivePermissions(\n user: AuthUser,\n rolePermissions: Record<string, string[]> = ROLE_PERMISSIONS,\n): string[] {\n return getUserPermissions(user, rolePermissions);\n}\n\nexport function canAccessResource(\n user: AuthUser,\n resource: string,\n action: string,\n rolePermissions: Record<string, string[]> = ROLE_PERMISSIONS,\n): boolean {\n return hasPermission(user, `${resource}:${action}`, rolePermissions);\n}\n\nexport function filterPermissions(\n permissions: string[],\n resource?: string,\n): string[] {\n if (!resource) return permissions;\n\n return permissions.filter((perm) => {\n const [permResource] = perm.split(\":\");\n return permResource === resource || permResource === \"*\";\n });\n}\n\nexport function parsePermission(permission: string): {\n resource: string;\n action: string;\n condition?: Condition;\n} {\n const [resource, action, ...rest] = permission.split(\":\");\n return {\n resource,\n action,\n condition: rest.length > 0 ? JSON.parse(rest.join(\":\")) : undefined,\n };\n}\n\nexport function buildPermission(\n resource: string,\n action: string,\n condition?: Condition,\n): string {\n if (condition) {\n return `${resource}:${action}:${JSON.stringify(condition)}`;\n }\n return `${resource}:${action}`;\n}\n\nexport function evaluateCondition(\n condition: Condition,\n context: Record<string, any>,\n): boolean {\n const { field, operator, value } = condition;\n const fieldValue = context[field];\n\n if (fieldValue === undefined) return false;\n\n switch (operator) {\n case \"eq\":\n return fieldValue === value;\n case \"neq\":\n return fieldValue !== value;\n case \"in\":\n return Array.isArray(value) && value.includes(fieldValue);\n case \"nin\":\n return Array.isArray(value) && !value.includes(fieldValue);\n case \"gt\":\n return fieldValue > value;\n case \"lt\":\n return fieldValue < value;\n case \"gte\":\n return fieldValue >= value;\n case \"lte\":\n return fieldValue <= value;\n case \"contains\":\n if (typeof fieldValue === \"string\") {\n return fieldValue.includes(value);\n }\n if (Array.isArray(fieldValue)) {\n return fieldValue.includes(value);\n }\n return false;\n default:\n return false;\n }\n}\n\nexport function evaluateConditions(\n conditions: Condition[],\n context: Record<string, any>,\n): boolean {\n if (!conditions || conditions.length === 0) return true;\n\n return conditions.every((condition) => evaluateCondition(condition, context));\n}\n\nexport function resolveConditionValue(\n value: any,\n context: Record<string, any>,\n): any {\n if (typeof value !== \"string\") return value;\n\n if (value.startsWith(\"${\") && value.endsWith(\"}\")) {\n const path = value.slice(2, -1);\n const keys = path.split(\".\");\n let resolved = context;\n\n for (const key of keys) {\n if (resolved === undefined || resolved === null) return undefined;\n resolved = resolved[key];\n }\n\n return resolved;\n }\n\n return value;\n}\n\nexport function evaluateConditionWithContext(\n condition: Condition,\n context: Record<string, any>,\n): boolean {\n const resolvedCondition = {\n ...condition,\n value: resolveConditionValue(condition.value, context),\n };\n\n return evaluateCondition(resolvedCondition, context);\n}\n\nexport class PermissionChecker {\n private rolePermissions: Record<string, string[]>;\n\n constructor(rolePermissions: Record<string, string[]> = ROLE_PERMISSIONS) {\n this.rolePermissions = rolePermissions;\n }\n\n check(user: AuthUser, permission: string): boolean {\n return hasPermission(user, permission, this.rolePermissions);\n }\n\n checkRole(user: AuthUser, role: string): boolean {\n return hasRole(user, role);\n }\n\n checkAnyRole(user: AuthUser, roles: string[]): boolean {\n return hasAnyRole(user, roles);\n }\n\n checkAllRoles(user: AuthUser, roles: string[]): boolean {\n return hasAllRoles(user, roles);\n }\n\n getPermissions(user: AuthUser): string[] {\n return getUserPermissions(user, this.rolePermissions);\n }\n\n canAccess(user: AuthUser, resource: string, action: string): boolean {\n return canAccessResource(user, resource, action, this.rolePermissions);\n }\n\n filterByResource(permissions: string[], resource: string): string[] {\n return filterPermissions(permissions, resource);\n }\n}\n"]}
|