@hkyhy/marsun-components-core 0.1.37 → 0.1.38
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/components/Permissions/Permissions.d.ts +37 -0
- package/dist/components/Permissions/Permissions.js +52 -0
- package/dist/components/Permissions/Permissions.js.map +1 -0
- package/dist/components/Permissions/index.d.ts +2 -0
- package/dist/components/Permissions/style.module.scss.js +7 -0
- package/dist/components/Permissions/style.module.scss.js.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +200 -195
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/provider/MarsunCoreProvider.js +23 -29
- package/dist/provider/MarsunCoreProvider.js.map +1 -1
- package/dist/provider/context.d.ts +2 -0
- package/dist/provider/context.js +5 -4
- package/dist/provider/context.js.map +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
export type PermissionsType = 'hidden' | 'tooltip' | 'error';
|
|
3
|
+
/** 权限请求:字符串数组(OR)、或自定义判定函数 */
|
|
4
|
+
export type PermissionRequest = string[] | ((permissions: string[]) => boolean) | (() => boolean);
|
|
5
|
+
export type PermissionsRenderProps = {
|
|
6
|
+
isPass: boolean;
|
|
7
|
+
type: PermissionsType;
|
|
8
|
+
request?: PermissionRequest;
|
|
9
|
+
};
|
|
10
|
+
export type PermissionsProps = {
|
|
11
|
+
/** 无权限呈现:hidden 隐藏 / tooltip 可看见但不可操作 / error 展示 403 */
|
|
12
|
+
type?: PermissionsType;
|
|
13
|
+
/** 包裹标签,同 React.createElement 的 type,默认 span */
|
|
14
|
+
tagName?: keyof HTMLElementTagNameMap | string;
|
|
15
|
+
/** 无权限提示文案 */
|
|
16
|
+
message?: string;
|
|
17
|
+
/** 所需权限;数组为 OR;空/未传视为通过 */
|
|
18
|
+
request?: PermissionRequest;
|
|
19
|
+
className?: string;
|
|
20
|
+
children?: ReactNode | ((props: PermissionsRenderProps) => ReactNode);
|
|
21
|
+
} & Record<string, unknown>;
|
|
22
|
+
export declare function computedIsPass({ permissions, request, }: {
|
|
23
|
+
permissions?: string[];
|
|
24
|
+
request?: PermissionRequest;
|
|
25
|
+
}): boolean;
|
|
26
|
+
export declare function usePermissions(): {
|
|
27
|
+
permissions: string[];
|
|
28
|
+
};
|
|
29
|
+
export declare function usePermissionsPass({ request }: {
|
|
30
|
+
request?: PermissionRequest;
|
|
31
|
+
}): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* 权限控制:对照 kne-union Permissions,权限源改为 MarsunCoreProvider.auth。
|
|
34
|
+
* 判定语义:request 数组为 OR(与上游运行时一致)。
|
|
35
|
+
*/
|
|
36
|
+
declare const Permissions: FC<PermissionsProps>;
|
|
37
|
+
export default Permissions;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as i, Fragment as m } from "react/jsx-runtime";
|
|
2
|
+
import { Result as p, Tooltip as c } from "antd";
|
|
3
|
+
import y from "classnames";
|
|
4
|
+
import { createElement as A } from "react";
|
|
5
|
+
import P from "./style.module.scss.js";
|
|
6
|
+
import { useMarsunAuth as a } from "../../provider/context.js";
|
|
7
|
+
function u({
|
|
8
|
+
permissions: r,
|
|
9
|
+
request: n
|
|
10
|
+
}) {
|
|
11
|
+
if (typeof n == "function")
|
|
12
|
+
return !!n(r || []);
|
|
13
|
+
if (Array.isArray(n) && n.length > 0) {
|
|
14
|
+
const t = r || [];
|
|
15
|
+
return n.some((o) => t.indexOf(o) > -1);
|
|
16
|
+
}
|
|
17
|
+
return !0;
|
|
18
|
+
}
|
|
19
|
+
function d() {
|
|
20
|
+
const { permissions: r } = a();
|
|
21
|
+
return { permissions: r ?? [] };
|
|
22
|
+
}
|
|
23
|
+
function g({ request: r }) {
|
|
24
|
+
const { permissions: n } = d(), { hasPermission: t } = a();
|
|
25
|
+
return typeof r == "function" ? u({ permissions: n, request: r }) : Array.isArray(r) && r.length > 0 ? n.length > 0 ? u({ permissions: n, request: r }) : r.some((o) => !!(t != null && t(o))) : !0;
|
|
26
|
+
}
|
|
27
|
+
const B = ({
|
|
28
|
+
type: r = "hidden",
|
|
29
|
+
className: n,
|
|
30
|
+
tagName: t = "span",
|
|
31
|
+
message: o = "您暂无权限,请联系管理员",
|
|
32
|
+
request: e,
|
|
33
|
+
children: s,
|
|
34
|
+
...l
|
|
35
|
+
}) => {
|
|
36
|
+
const f = g({ request: e });
|
|
37
|
+
return typeof s == "function" ? /* @__PURE__ */ i(m, { children: s({ isPass: f, type: r, request: e }) }) : f ? /* @__PURE__ */ i(m, { children: s }) : r === "error" ? /* @__PURE__ */ i(p, { status: "403", subTitle: o }) : r === "tooltip" ? /* @__PURE__ */ i(c, { title: o, children: A(
|
|
38
|
+
t,
|
|
39
|
+
{
|
|
40
|
+
...l,
|
|
41
|
+
className: y("permissions-outer", P["permissions-outer"], n)
|
|
42
|
+
},
|
|
43
|
+
s
|
|
44
|
+
) }) : null;
|
|
45
|
+
};
|
|
46
|
+
export {
|
|
47
|
+
u as computedIsPass,
|
|
48
|
+
B as default,
|
|
49
|
+
d as usePermissions,
|
|
50
|
+
g as usePermissionsPass
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=Permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Permissions.js","sources":["../../../src/components/Permissions/Permissions.tsx"],"sourcesContent":["import { useMarsunAuth } from '@/provider';\nimport { Result, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport { createElement, type FC, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type PermissionsType = 'hidden' | 'tooltip' | 'error';\n\n/** 权限请求:字符串数组(OR)、或自定义判定函数 */\nexport type PermissionRequest = string[] | ((permissions: string[]) => boolean) | (() => boolean);\n\nexport type PermissionsRenderProps = {\n isPass: boolean;\n type: PermissionsType;\n request?: PermissionRequest;\n};\n\nexport type PermissionsProps = {\n /** 无权限呈现:hidden 隐藏 / tooltip 可看见但不可操作 / error 展示 403 */\n type?: PermissionsType;\n /** 包裹标签,同 React.createElement 的 type,默认 span */\n tagName?: keyof HTMLElementTagNameMap | string;\n /** 无权限提示文案 */\n message?: string;\n /** 所需权限;数组为 OR;空/未传视为通过 */\n request?: PermissionRequest;\n className?: string;\n children?: ReactNode | ((props: PermissionsRenderProps) => ReactNode);\n} & Record<string, unknown>;\n\nexport function computedIsPass({\n permissions,\n request,\n}: {\n permissions?: string[];\n request?: PermissionRequest;\n}): boolean {\n if (typeof request === 'function') {\n return Boolean((request as (permissions: string[]) => boolean)(permissions || []));\n }\n if (Array.isArray(request) && request.length > 0) {\n const list = permissions || [];\n return request.some((currentKey) => list.indexOf(currentKey) > -1);\n }\n return true;\n}\n\nexport function usePermissions(): { permissions: string[] } {\n const { permissions } = useMarsunAuth();\n return { permissions: permissions ?? [] };\n}\n\nexport function usePermissionsPass({ request }: { request?: PermissionRequest }): boolean {\n const { permissions } = usePermissions();\n const { hasPermission } = useMarsunAuth();\n\n if (typeof request === 'function') {\n return computedIsPass({ permissions, request });\n }\n\n if (Array.isArray(request) && request.length > 0) {\n if (permissions.length > 0) {\n return computedIsPass({ permissions, request });\n }\n return request.some((key) => !!hasPermission?.(key));\n }\n\n return true;\n}\n\n/**\n * 权限控制:对照 kne-union Permissions,权限源改为 MarsunCoreProvider.auth。\n * 判定语义:request 数组为 OR(与上游运行时一致)。\n */\nconst Permissions: FC<PermissionsProps> = ({\n type = 'hidden',\n className,\n tagName = 'span',\n message = '您暂无权限,请联系管理员',\n request,\n children,\n ...props\n}) => {\n const isPass = usePermissionsPass({ request });\n\n if (typeof children === 'function') {\n return <>{children({ isPass, type, request })}</>;\n }\n\n if (isPass) {\n return <>{children}</>;\n }\n\n if (type === 'error') {\n return <Result status=\"403\" subTitle={message} />;\n }\n\n if (type === 'tooltip') {\n return (\n <Tooltip title={message}>\n {createElement(\n tagName,\n {\n ...props,\n className: classNames('permissions-outer', styles['permissions-outer'], className),\n },\n children,\n )}\n </Tooltip>\n );\n }\n\n return null;\n};\n\nexport default Permissions;\n"],"names":["computedIsPass","permissions","request","list","currentKey","usePermissions","useMarsunAuth","usePermissionsPass","hasPermission","key","Permissions","type","className","tagName","message","children","props","isPass","jsx","Result","Tooltip","createElement","classNames","styles"],"mappings":";;;;;;AA8BO,SAASA,EAAe;AAAA,EAC7B,aAAAC;AAAA,EACA,SAAAC;AACF,GAGY;AACV,MAAI,OAAOA,KAAY;AACrB,WAAO,EAASA,EAA+CD,KAAe,CAAA,CAAE;AAElF,MAAI,MAAM,QAAQC,CAAO,KAAKA,EAAQ,SAAS,GAAG;AAChD,UAAMC,IAAOF,KAAe,CAAA;AAC5B,WAAOC,EAAQ,KAAK,CAACE,MAAeD,EAAK,QAAQC,CAAU,IAAI,EAAE;AAAA,EACnE;AACA,SAAO;AACT;AAEO,SAASC,IAA4C;AAC1D,QAAM,EAAE,aAAAJ,EAAA,IAAgBK,EAAA;AACxB,SAAO,EAAE,aAAaL,KAAe,GAAC;AACxC;AAEO,SAASM,EAAmB,EAAE,SAAAL,KAAqD;AACxF,QAAM,EAAE,aAAAD,EAAA,IAAgBI,EAAA,GAClB,EAAE,eAAAG,EAAA,IAAkBF,EAAA;AAE1B,SAAI,OAAOJ,KAAY,aACdF,EAAe,EAAE,aAAAC,GAAa,SAAAC,GAAS,IAG5C,MAAM,QAAQA,CAAO,KAAKA,EAAQ,SAAS,IACzCD,EAAY,SAAS,IAChBD,EAAe,EAAE,aAAAC,GAAa,SAAAC,GAAS,IAEzCA,EAAQ,KAAK,CAACO,MAAQ,CAAC,EAACD,KAAA,QAAAA,EAAgBC,GAAI,IAG9C;AACT;AAMA,MAAMC,IAAoC,CAAC;AAAA,EACzC,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,SAAAZ;AAAA,EACA,UAAAa;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAASV,EAAmB,EAAE,SAAAL,GAAS;AAE7C,SAAI,OAAOa,KAAa,oCACZ,UAAAA,EAAS,EAAE,QAAAE,GAAQ,MAAAN,GAAM,SAAAT,EAAA,CAAS,GAAE,IAG5Ce,2BACQ,UAAAF,GAAS,IAGjBJ,MAAS,UACJ,gBAAAO,EAACC,GAAA,EAAO,QAAO,OAAM,UAAUL,GAAS,IAG7CH,MAAS,YAET,gBAAAO,EAACE,GAAA,EAAQ,OAAON,GACb,UAAAO;AAAA,IACCR;AAAA,IACA;AAAA,MACE,GAAGG;AAAA,MACH,WAAWM,EAAW,qBAAqBC,EAAO,mBAAmB,GAAGX,CAAS;AAAA,IAAA;AAAA,IAEnFG;AAAA,EAAA,GAEJ,IAIG;AACT;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export * from './components/Form';
|
|
|
30
30
|
export * from './components/InteractiveBlock';
|
|
31
31
|
export * from './components/Layout';
|
|
32
32
|
export * from './components/Modal';
|
|
33
|
+
export * from './components/Permissions';
|
|
33
34
|
export * from './components/Stat';
|
|
34
35
|
export * from './components/Table';
|
|
35
36
|
export * from './components/Tag';
|