@nocobase/plugin-acl 1.3.15-beta → 1.3.16-beta
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.
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is part of the NocoBase (R) project.
|
|
3
|
+
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
4
|
+
* Authors: NocoBase Team.
|
|
5
|
+
*
|
|
6
|
+
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
|
+
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
|
+
*/
|
|
9
|
+
import { TabsProps } from 'antd/es/tabs/index';
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { Role } from './RolesManagerProvider';
|
|
12
|
+
interface PermissionsTabsProps {
|
|
13
|
+
/**
|
|
14
|
+
* the key of the currently active tab panel
|
|
15
|
+
*/
|
|
16
|
+
activeKey: string;
|
|
17
|
+
/**
|
|
18
|
+
* the currently selected role
|
|
19
|
+
*/
|
|
20
|
+
role: Role;
|
|
21
|
+
/**
|
|
22
|
+
* translation function
|
|
23
|
+
*/
|
|
24
|
+
t: (key: string) => string;
|
|
25
|
+
/**
|
|
26
|
+
* used to constrain the size of the container in the Tab
|
|
27
|
+
*/
|
|
28
|
+
TabLayout: React.FC;
|
|
29
|
+
}
|
|
30
|
+
type Tab = TabsProps['items'][0];
|
|
31
|
+
type TabCallback = (props: PermissionsTabsProps) => Tab;
|
|
32
|
+
/**
|
|
33
|
+
* the extension API for ACL settings page
|
|
34
|
+
*/
|
|
35
|
+
export declare class ACLSettingsUI {
|
|
36
|
+
private permissionsTabs;
|
|
37
|
+
addPermissionsTab(tab: Tab | TabCallback): void;
|
|
38
|
+
getPermissionsTabs(props: PermissionsTabsProps): Tab[];
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -7,7 +7,22 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
/// <reference types="react" />
|
|
10
|
+
export interface Role {
|
|
11
|
+
createdAt: string;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
name: string;
|
|
14
|
+
title: string;
|
|
15
|
+
description: string;
|
|
16
|
+
strategy: {
|
|
17
|
+
actions: string[];
|
|
18
|
+
};
|
|
19
|
+
default: boolean;
|
|
20
|
+
hidden: boolean;
|
|
21
|
+
allowConfigure: boolean;
|
|
22
|
+
allowNewMenu: boolean;
|
|
23
|
+
snippets: string[];
|
|
24
|
+
}
|
|
10
25
|
export declare const RolesManagerContext: import("react").Context<{
|
|
11
|
-
role:
|
|
12
|
-
setRole: (role:
|
|
26
|
+
role: Role;
|
|
27
|
+
setRole: (role: Role) => void;
|
|
13
28
|
}>;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { Plugin } from '@nocobase/client';
|
|
10
|
+
import { ACLSettingsUI } from './ACLSettingsUI';
|
|
10
11
|
import { RolesManager } from './roles-manager';
|
|
11
12
|
export declare class PluginACLClient extends Plugin {
|
|
12
13
|
rolesManager: RolesManager;
|
|
14
|
+
settingsUI: ACLSettingsUI;
|
|
13
15
|
load(): Promise<void>;
|
|
14
16
|
}
|
|
15
17
|
export { RolesManagerContext } from './RolesManagerProvider';
|
package/dist/client/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
(function(v,c){typeof exports=="object"&&typeof module!="undefined"?c(exports,require("@nocobase/client"),require("react/jsx-runtime"),require("react"),require("antd"),require("@formily/react"),require("@ant-design/icons"),require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("ahooks"),require("lodash"),require("antd-style")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","react/jsx-runtime","react","antd","@formily/react","@ant-design/icons","react-i18next","@formily/shared","@nocobase/utils/client","@formily/core","ahooks","lodash","antd-style"],c):(v=typeof globalThis!="undefined"?globalThis:v||self,c(v["@nocobase/plugin-acl"]={},v["@nocobase/client"],v.jsxRuntime,v.react,v.antd,v["@formily/react"],v["@ant-design/icons"],v["react-i18next"],v["@formily/shared"],v["@nocobase/utils"],v["@formily/core"],v.ahooks,v.lodash,v["antd-style"]))})(this,function(v,c,a,h,p,E,U,T,x,j,K,ge,ee,tt){"use strict";var Ii=Object.defineProperty,Ti=Object.defineProperties;var Oi=Object.getOwnPropertyDescriptors;var et=Object.getOwnPropertySymbols;var Mi=Object.prototype.hasOwnProperty,Fi=Object.prototype.propertyIsEnumerable;var fe=(v,c,a)=>c in v?Ii(v,c,{enumerable:!0,configurable:!0,writable:!0,value:a}):v[c]=a,P=(v,c)=>{for(var a in c||(c={}))Mi.call(c,a)&&fe(v,a,c[a]);if(et)for(var a of et(c))Fi.call(c,a)&&fe(v,a,c[a]);return v},D=(v,c)=>Ti(v,Oi(c));var ve=(v,c,a)=>(fe(v,typeof c!="symbol"?c+"":c,a),a);var w=(v,c,a)=>new Promise((h,p)=>{var E=x=>{try{T(a.next(x))}catch(j){p(j)}},U=x=>{try{T(a.throw(x))}catch(j){p(j)}},T=x=>x.done?h(x.value):Promise.resolve(x.value).then(E,U);T((a=a.apply(v,c)).next())});function N(){return T.useTranslation(["@nocobase/plugin-acl","client"],{nsMode:"fallback"})}const F=h.createContext({role:null});F.displayName="RolesManagerContext";var L=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function me(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var nt=Array.isArray,G=nt,rt=typeof L=="object"&&L&&L.Object===Object&&L,st=rt,at=st,ot=typeof self=="object"&&self&&self.Object===Object&&self,it=at||ot||Function("return this")(),V=it,ct=V,lt=ct.Symbol,W=lt,ye=W,_e=Object.prototype,ut=_e.hasOwnProperty,pt=_e.toString,z=ye?ye.toStringTag:void 0;function dt(e){var t=ut.call(e,z),n=e[z];try{e[z]=void 0;var r=!0}catch(i){}var s=pt.call(e);return r&&(t?e[z]=n:delete e[z]),s}var ht=dt,ft=Object.prototype,vt=ft.toString;function gt(e){return vt.call(e)}var mt=gt,be=W,yt=ht,_t=mt,bt="[object Null]",Ct="[object Undefined]",Ce=be?be.toStringTag:void 0;function $t(e){return e==null?e===void 0?Ct:bt:Ce&&Ce in Object(e)?yt(e):_t(e)}var te=$t;function xt(e){return e!=null&&typeof e=="object"}var ne=xt,St=te,wt=ne,At="[object Symbol]";function Pt(e){return typeof e=="symbol"||wt(e)&&St(e)==At}var re=Pt,It=G,Tt=re,Ot=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Mt=/^\w*$/;function Ft(e,t){if(It(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Tt(e)?!0:Mt.test(e)||!Ot.test(e)||t!=null&&e in Object(t)}var Et=Ft;function Dt(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var se=Dt,Nt=te,kt=se,qt="[object AsyncFunction]",Ht="[object Function]",jt="[object GeneratorFunction]",Gt="[object Proxy]";function zt(e){if(!kt(e))return!1;var t=Nt(e);return t==Ht||t==jt||t==qt||t==Gt}var Ut=zt,Kt=V,Lt=Kt["__core-js_shared__"],Vt=Lt,ae=Vt,$e=function(){var e=/[^.]+$/.exec(ae&&ae.keys&&ae.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Wt(e){return!!$e&&$e in e}var Bt=Wt,Yt=Function.prototype,Xt=Yt.toString;function Jt(e){if(e!=null){try{return Xt.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var Zt=Jt,Qt=Ut,Rt=Bt,en=se,tn=Zt,nn=/[\\^$.*+?()[\]{}|]/g,rn=/^\[object .+?Constructor\]$/,sn=Function.prototype,an=Object.prototype,on=sn.toString,cn=an.hasOwnProperty,ln=RegExp("^"+on.call(cn).replace(nn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function un(e){if(!en(e)||Rt(e))return!1;var t=Qt(e)?ln:rn;return t.test(tn(e))}var pn=un;function dn(e,t){return e==null?void 0:e[t]}var hn=dn,fn=pn,vn=hn;function gn(e,t){var n=vn(e,t);return fn(n)?n:void 0}var B=gn,mn=B,yn=mn(Object,"create"),Y=yn,xe=Y;function _n(){this.__data__=xe?xe(null):{},this.size=0}var bn=_n;function Cn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var $n=Cn,xn=Y,Sn="__lodash_hash_undefined__",wn=Object.prototype,An=wn.hasOwnProperty;function Pn(e){var t=this.__data__;if(xn){var n=t[e];return n===Sn?void 0:n}return An.call(t,e)?t[e]:void 0}var In=Pn,Tn=Y,On=Object.prototype,Mn=On.hasOwnProperty;function Fn(e){var t=this.__data__;return Tn?t[e]!==void 0:Mn.call(t,e)}var En=Fn,Dn=Y,Nn="__lodash_hash_undefined__";function kn(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Dn&&t===void 0?Nn:t,this}var qn=kn,Hn=bn,jn=$n,Gn=In,zn=En,Un=qn;function k(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}k.prototype.clear=Hn,k.prototype.delete=jn,k.prototype.get=Gn,k.prototype.has=zn,k.prototype.set=Un;var Kn=k;function Ln(){this.__data__=[],this.size=0}var Vn=Ln;function Wn(e,t){return e===t||e!==e&&t!==t}var Se=Wn,Bn=Se;function Yn(e,t){for(var n=e.length;n--;)if(Bn(e[n][0],t))return n;return-1}var X=Yn,Xn=X,Jn=Array.prototype,Zn=Jn.splice;function Qn(e){var t=this.__data__,n=Xn(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():Zn.call(t,n,1),--this.size,!0}var Rn=Qn,er=X;function tr(e){var t=this.__data__,n=er(t,e);return n<0?void 0:t[n][1]}var nr=tr,rr=X;function sr(e){return rr(this.__data__,e)>-1}var ar=sr,or=X;function ir(e,t){var n=this.__data__,r=or(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var cr=ir,lr=Vn,ur=Rn,pr=nr,dr=ar,hr=cr;function q(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}q.prototype.clear=lr,q.prototype.delete=ur,q.prototype.get=pr,q.prototype.has=dr,q.prototype.set=hr;var fr=q,vr=B,gr=V,mr=vr(gr,"Map"),yr=mr,we=Kn,_r=fr,br=yr;function Cr(){this.size=0,this.__data__={hash:new we,map:new(br||_r),string:new we}}var $r=Cr;function xr(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Sr=xr,wr=Sr;function Ar(e,t){var n=e.__data__;return wr(t)?n[typeof t=="string"?"string":"hash"]:n.map}var J=Ar,Pr=J;function Ir(e){var t=Pr(this,e).delete(e);return this.size-=t?1:0,t}var Tr=Ir,Or=J;function Mr(e){return Or(this,e).get(e)}var Fr=Mr,Er=J;function Dr(e){return Er(this,e).has(e)}var Nr=Dr,kr=J;function qr(e,t){var n=kr(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var Hr=qr,jr=$r,Gr=Tr,zr=Fr,Ur=Nr,Kr=Hr;function H(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}H.prototype.clear=jr,H.prototype.delete=Gr,H.prototype.get=zr,H.prototype.has=Ur,H.prototype.set=Kr;var Ae=H,Pe=Ae,Lr="Expected a function";function oe(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(Lr);var n=function(){var r=arguments,s=t?t.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var o=e.apply(this,r);return n.cache=i.set(s,o)||i,o};return n.cache=new(oe.Cache||Pe),n}oe.Cache=Pe;var Vr=oe,Wr=Vr,Br=500;function Yr(e){var t=Wr(e,function(r){return n.size===Br&&n.clear(),r}),n=t.cache;return t}var Xr=Yr,Jr=Xr,Zr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Qr=/\\(\\)?/g,Rr=Jr(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Zr,function(n,r,s,i){t.push(s?i.replace(Qr,"$1"):r||n)}),t}),es=Rr;function ts(e,t){for(var n=-1,r=e==null?0:e.length,s=Array(r);++n<r;)s[n]=t(e[n],n,e);return s}var ns=ts,Ie=W,rs=ns,ss=G,as=re,os=1/0,Te=Ie?Ie.prototype:void 0,Oe=Te?Te.toString:void 0;function Me(e){if(typeof e=="string")return e;if(ss(e))return rs(e,Me)+"";if(as(e))return Oe?Oe.call(e):"";var t=e+"";return t=="0"&&1/e==-os?"-0":t}var is=Me,cs=is;function ls(e){return e==null?"":cs(e)}var us=ls,ps=G,ds=Et,hs=es,fs=us;function vs(e,t){return ps(e)?e:ds(e,t)?[e]:hs(fs(e))}var Z=vs,gs=re,ms=1/0;function ys(e){if(typeof e=="string"||gs(e))return e;var t=e+"";return t=="0"&&1/e==-ms?"-0":t}var ie=ys,_s=Z,bs=ie;function Cs(e,t){t=_s(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[bs(t[n++])];return n&&n==r?e:void 0}var $s=Cs,xs=B,Ss=function(){try{var e=xs(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),Fe=Ss,Ee=Fe;function ws(e,t,n){t=="__proto__"&&Ee?Ee(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var As=ws,Ps=As,Is=Se,Ts=Object.prototype,Os=Ts.hasOwnProperty;function Ms(e,t,n){var r=e[t];(!(Os.call(e,t)&&Is(r,n))||n===void 0&&!(t in e))&&Ps(e,t,n)}var Fs=Ms,Es=9007199254740991,Ds=/^(?:0|[1-9]\d*)$/;function Ns(e,t){var n=typeof e;return t=t==null?Es:t,!!t&&(n=="number"||n!="symbol"&&Ds.test(e))&&e>-1&&e%1==0&&e<t}var De=Ns,ks=Fs,qs=Z,Hs=De,Ne=se,js=ie;function Gs(e,t,n,r){if(!Ne(e))return e;t=qs(t,e);for(var s=-1,i=t.length,o=i-1,l=e;l!=null&&++s<i;){var u=js(t[s]),d=n;if(u==="__proto__"||u==="constructor"||u==="prototype")return e;if(s!=o){var y=l[u];d=r?r(y,u,l):void 0,d===void 0&&(d=Ne(y)?y:Hs(t[s+1])?[]:{})}ks(l,u,d),l=l[u]}return e}var zs=Gs,Us=$s,Ks=zs,Ls=Z;function Vs(e,t,n){for(var r=-1,s=t.length,i={};++r<s;){var o=t[r],l=Us(e,o);n(l,o)&&Ks(i,Ls(o,e),l)}return i}var Ws=Vs;function Bs(e,t){return e!=null&&t in Object(e)}var Ys=Bs,Xs=te,Js=ne,Zs="[object Arguments]";function Qs(e){return Js(e)&&Xs(e)==Zs}var Rs=Qs,ke=Rs,ea=ne,qe=Object.prototype,ta=qe.hasOwnProperty,na=qe.propertyIsEnumerable,ra=ke(function(){return arguments}())?ke:function(e){return ea(e)&&ta.call(e,"callee")&&!na.call(e,"callee")},He=ra,sa=9007199254740991;function aa(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=sa}var oa=aa,ia=Z,ca=He,la=G,ua=De,pa=oa,da=ie;function ha(e,t,n){t=ia(t,e);for(var r=-1,s=t.length,i=!1;++r<s;){var o=da(t[r]);if(!(i=e!=null&&n(e,o)))break;e=e[o]}return i||++r!=s?i:(s=e==null?0:e.length,!!s&&pa(s)&&ua(o,s)&&(la(e)||ca(e)))}var fa=ha,va=Ys,ga=fa;function ma(e,t){return e!=null&&ga(e,t,va)}var ya=ma,_a=Ws,ba=ya;function Ca(e,t){return _a(e,t,function(n,r){return ba(e,r)})}var $a=Ca;function xa(e,t){for(var n=-1,r=t.length,s=e.length;++n<r;)e[s+n]=t[n];return e}var Sa=xa,je=W,wa=He,Aa=G,Ge=je?je.isConcatSpreadable:void 0;function Pa(e){return Aa(e)||wa(e)||!!(Ge&&e&&e[Ge])}var Ia=Pa,Ta=Sa,Oa=Ia;function ze(e,t,n,r,s){var i=-1,o=e.length;for(n||(n=Oa),s||(s=[]);++i<o;){var l=e[i];t>0&&n(l)?t>1?ze(l,t-1,n,r,s):Ta(s,l):r||(s[s.length]=l)}return s}var Ma=ze,Fa=Ma;function Ea(e){var t=e==null?0:e.length;return t?Fa(e,1):[]}var Da=Ea;function Na(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var ka=Na,qa=ka,Ue=Math.max;function Ha(e,t,n){return t=Ue(t===void 0?e.length-1:t,0),function(){for(var r=arguments,s=-1,i=Ue(r.length-t,0),o=Array(i);++s<i;)o[s]=r[t+s];s=-1;for(var l=Array(t+1);++s<t;)l[s]=r[s];return l[t]=n(o),qa(e,this,l)}}var ja=Ha;function Ga(e){return function(){return e}}var za=Ga;function Ua(e){return e}var Ka=Ua,La=za,Ke=Fe,Va=Ka,Wa=Ke?function(e,t){return Ke(e,"toString",{configurable:!0,enumerable:!1,value:La(t),writable:!0})}:Va,Ba=Wa,Ya=800,Xa=16,Ja=Date.now;function Za(e){var t=0,n=0;return function(){var r=Ja(),s=Xa-(r-n);if(n=r,s>0){if(++t>=Ya)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var Qa=Za,Ra=Ba,eo=Qa,to=eo(Ra),no=to,ro=Da,so=ja,ao=no;function oo(e){return ao(so(e,void 0,ro),e+"")}var io=oo,co=$a,lo=io,uo=lo(function(e,t){return e==null?{}:co(e,t)}),po=uo;const ho=me(po),fo={type:"object",properties:{[x.uid()]:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=c.useRecord(),n=c.useRequest(()=>Promise.resolve({data:ho(t,["title","name","default"])}),D(P({},e),{manual:!0})),r=c.useActionContext();return h.useEffect(()=>{r.visible&&n.run()},[r.visible]),n}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}',"x-reactions":e=>{e.initialValue?e.disabled=!0:e.disabled=!1}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},vo=({loadMore:e})=>{const[t,n]=h.useState(null),r=h.useRef(null),s=h.useCallback(i=>{i&&(r.current&&r.current.disconnect(),r.current=new IntersectionObserver(o=>{o.forEach(l=>{l.target===i.current&&l.isIntersecting&&(r.current&&r.current.unobserve(i.current),e())})}),i.current&&r.current&&r.current.observe(i.current))},[e]);return h.useEffect(()=>(s(t),()=>{r.current&&r.current.disconnect()}),[t,s]),{lastItem:t,setLastItem:n}},Q=()=>{const{t:e}=N(),{data:t,mutate:n}=c.useResourceActionContext(),[r,s]=h.useState(!1),[i,o]=h.useState(null),{role:l,setRole:u}=h.useContext(F),[d,y]=h.useState([]),[C,b]=h.useState(!1),S=c.useAPIClient(),A=h.useCallback(()=>w(this,null,function*(){const f=t==null?void 0:t.meta;if(!f||f.page>=f.totalPage)return;b(!0);const _=yield S.resource("roles").list({page:f.page+1,pageSize:f.pageSize,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]});n((_==null?void 0:_.data)||{}),b(!1)}),[t]),{lastItem:$,setLastItem:I}=vo({loadMore:A}),g=({key:f})=>{u(d.find(_=>_.name===f))};h.useEffect(()=>{d[0]&&u(d[0])},[d,u]),h.useEffect(()=>{var _,O;if(!((_=t==null?void 0:t.data)!=null&&_.length))return;const f=h.createRef();I(f),((O=t.meta)==null?void 0:O.page)>1?y(M=>M.concat(t.data)):y(t.data)},[t,I]);const m=h.useMemo(()=>d.map((f,_)=>({key:f.name,label:_===d.length-1?a.jsx("div",{ref:$,children:a.jsx(Q.Item,{item:f,onEdit:()=>{s(!0),o(f)}})}):a.jsx(Q.Item,{item:f,onEdit:()=>{s(!0),o(f)}})})),[d,$]);return a.jsxs(a.Fragment,{children:[d.length?a.jsx(p.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:[...m,...C?[{key:"loading",label:a.jsx(p.Spin,{})}]:[]],selectedKeys:[l==null?void 0:l.name],onSelect:g}):a.jsx(p.Empty,{image:p.Empty.PRESENTED_IMAGE_SIMPLE}),a.jsx(c.ActionContextProvider,{value:{visible:r,setVisible:s},children:a.jsx(c.RecordProvider,{record:i,collectionName:"departments",children:a.jsx(c.SchemaComponent,{scope:{t:e},schema:fo})})})]})};Q.Item=function({item:t,onEdit:n}){const{t:r}=N(),{refreshAsync:s}=c.useResourceActionContext(),{modal:i,message:o}=p.App.useApp(),l=c.useAPIClient(),u=()=>{i.confirm({title:r("Delete"),content:r("Are you sure you want to delete it?"),onOk:()=>w(this,null,function*(){yield l.resource("roles").destroy({filterByTk:t.name}),o.success(r("Deleted successfully")),yield s()})})},d=({key:C,domEvent:b})=>{switch(b.stopPropagation(),C){case"edit":n();break;case"delete":u()}},y=E.Schema.compile(t.title,{t:r});return a.jsxs(p.Row,{children:[a.jsx(p.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"},children:a.jsxs("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"},children:[a.jsx(U.TagOutlined,{}),a.jsx("span",{style:{marginLeft:"10px"},title:y,children:y})]})}),a.jsxs(p.Col,{children:[t.default?a.jsx(p.Tag,{color:"success",bordered:!1,children:r("Default")}):null,a.jsx(p.Dropdown,{menu:{items:[{label:r("Edit"),key:"edit"},{label:r("Delete"),key:"delete"}],onClick:d},children:a.jsx(U.MoreOutlined,{})})]})]})};const ce=h.createContext([]);ce.displayName="AvailableActionsContext";const go=e=>{const{data:t,loading:n}=c.useRequest({resource:"availableActions",action:"list"});return n?a.jsx(p.Spin,{}):a.jsx(ce.Provider,{value:t==null?void 0:t.data,children:e.children})},mo=()=>h.useContext(ce);var yo="__lodash_hash_undefined__";function _o(e){return this.__data__.set(e,yo),this}var bo=_o;function Co(e){return this.__data__.has(e)}var $o=Co,xo=Ae,So=bo,wo=$o;function R(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new xo;++t<n;)this.add(e[t])}R.prototype.add=R.prototype.push=So,R.prototype.has=wo;var Ao=R;function Po(e,t,n,r){for(var s=e.length,i=n+(r?1:-1);r?i--:++i<s;)if(t(e[i],i,e))return i;return-1}var Io=Po;function To(e){return e!==e}var Oo=To;function Mo(e,t,n){for(var r=n-1,s=e.length;++r<s;)if(e[r]===t)return r;return-1}var Fo=Mo,Eo=Io,Do=Oo,No=Fo;function ko(e,t,n){return t===t?No(e,t,n):Eo(e,Do,n)}var qo=ko,Ho=qo;function jo(e,t){var n=e==null?0:e.length;return!!n&&Ho(e,t,0)>-1}var Go=jo;function zo(e,t,n){for(var r=-1,s=e==null?0:e.length;++r<s;)if(n(t,e[r]))return!0;return!1}var Uo=zo;function Ko(e,t){return e.has(t)}var Lo=Ko,Vo=B,Wo=V,Bo=Vo(Wo,"Set"),Yo=Bo;function Xo(){}var Jo=Xo;function Zo(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var Le=Zo,le=Yo,Qo=Jo,Ro=Le,ei=1/0,ti=le&&1/Ro(new le([,-0]))[1]==ei?function(e){return new le(e)}:Qo,ni=ti,ri=Ao,si=Go,ai=Uo,oi=Lo,ii=ni,ci=Le,li=200;function ui(e,t,n){var r=-1,s=si,i=e.length,o=!0,l=[],u=l;if(n)o=!1,s=ai;else if(i>=li){var d=t?null:ii(e);if(d)return ci(d);o=!1,s=oi,u=new ri}else u=t?[]:l;e:for(;++r<i;){var y=e[r],C=t?t(y):y;if(y=n||y!==0?y:0,o&&C===C){for(var b=u.length;b--;)if(u[b]===C)continue e;t&&u.push(C),l.push(y)}else s(u,C,n)||(u!==l&&u.push(C),l.push(y))}return l}var pi=ui,di=pi;function hi(e){return e&&e.length?di(e):[]}var fi=hi;const vi=me(fi),gi=e=>{var n;if(!e)return{};const t={};return(n=e==null?void 0:e.forEach)==null||n.call(e,r=>{const[s,i]=r.split(":");t[s]=i||"all"}),t},Ve=e=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n];r==="all"?t.push(n):t.push(`${n}:${r}`)}return t},mi=E.connect(e=>{const{onChange:t}=e,n=mo(),r=c.useCompile(),{t:s}=T.useTranslation(),i=E.useField(),o=gi(i.value);return a.jsx("div",{children:a.jsx(p.Table,{rowKey:"name",size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:s("Action display name"),render:l=>r(l)},{dataIndex:"onNewRecord",title:s("Action type"),render:l=>l?a.jsx(p.Tag,{color:"green",children:s("Action on new records")}):a.jsx(p.Tag,{color:"geekblue",children:s("Action on existing records")})},{dataIndex:"enabled",title:s("Allow"),render:(l,u)=>a.jsx(p.Checkbox,{checked:l,"aria-label":`${u.name}_checkbox`,onChange:d=>{l?delete o[u.name]:o[u.name]="all",t(Ve(o))}})},{dataIndex:"scope",title:s("Data scope"),render:(l,u)=>!u.onNewRecord&&a.jsx(p.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:l,options:[{label:s("All records"),value:"all"},{label:s("Own records"),value:"own"}],onChange:d=>{o[u.name]=d,t(Ve(o))}})}],dataSource:n==null?void 0:n.map(l=>{let u="all",d=!1;return o[l.name]&&(d=!0,u=o[l.name]),D(P({},l),{enabled:d,scope:u})})})})}),We=tt.createStyles(({css:e})=>e`
|
|
10
|
+
(function(v,l){typeof exports=="object"&&typeof module!="undefined"?l(exports,require("@nocobase/client"),require("react/jsx-runtime"),require("@formily/core"),require("@formily/react"),require("@formily/shared"),require("ahooks"),require("antd"),require("react"),require("react-i18next"),require("lodash"),require("antd-style"),require("@ant-design/icons"),require("@nocobase/utils/client")):typeof define=="function"&&define.amd?define(["exports","@nocobase/client","react/jsx-runtime","@formily/core","@formily/react","@formily/shared","ahooks","antd","react","react-i18next","lodash","antd-style","@ant-design/icons","@nocobase/utils/client"],l):(v=typeof globalThis!="undefined"?globalThis:v||self,l(v["@nocobase/plugin-acl"]={},v["@nocobase/client"],v.jsxRuntime,v["@formily/core"],v["@formily/react"],v["@formily/shared"],v.ahooks,v.antd,v.react,v["react-i18next"],v.lodash,v["antd-style"],v["@ant-design/icons"],v["@nocobase/utils"]))})(this,function(v,l,a,N,O,D,L,p,d,w,te,Qe,fe,Re){"use strict";var Ti=Object.defineProperty,Oi=Object.defineProperties;var Mi=Object.getOwnPropertyDescriptors;var Ze=Object.getOwnPropertySymbols;var Fi=Object.prototype.hasOwnProperty,Ei=Object.prototype.propertyIsEnumerable;var he=(v,l,a)=>l in v?Ti(v,l,{enumerable:!0,configurable:!0,writable:!0,value:a}):v[l]=a,x=(v,l)=>{for(var a in l||(l={}))Fi.call(l,a)&&he(v,a,l[a]);if(Ze)for(var a of Ze(l))Ei.call(l,a)&&he(v,a,l[a]);return v},E=(v,l)=>Oi(v,Mi(l));var z=(v,l,a)=>(he(v,typeof l!="symbol"?l+"":l,a),a);var $=(v,l,a)=>new Promise((N,O)=>{var D=d=>{try{p(a.next(d))}catch(w){O(w)}},L=d=>{try{p(a.throw(d))}catch(w){O(w)}},p=d=>d.done?N(d.value):Promise.resolve(d.value).then(D,L);p((a=a.apply(v,l)).next())});var K=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function ve(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var et=typeof K=="object"&&K&&K.Object===Object&&K,tt=et,nt=tt,rt=typeof self=="object"&&self&&self.Object===Object&&self,st=nt||rt||Function("return this")(),V=st,at=V,ot=at.Symbol,W=ot,me=W,ge=Object.prototype,it=ge.hasOwnProperty,ct=ge.toString,U=me?me.toStringTag:void 0;function lt(e){var t=it.call(e,U),n=e[U];try{e[U]=void 0;var r=!0}catch(i){}var s=ct.call(e);return r&&(t?e[U]=n:delete e[U]),s}var ut=lt,pt=Object.prototype,dt=pt.toString;function ht(e){return dt.call(e)}var ft=ht,ye=W,vt=ut,mt=ft,gt="[object Null]",yt="[object Undefined]",be=ye?ye.toStringTag:void 0;function bt(e){return e==null?e===void 0?yt:gt:be&&be in Object(e)?vt(e):mt(e)}var ne=bt;function _t(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var re=_t,Ct=ne,$t=re,xt="[object AsyncFunction]",St="[object Function]",wt="[object GeneratorFunction]",At="[object Proxy]";function Pt(e){if(!$t(e))return!1;var t=Ct(e);return t==St||t==wt||t==xt||t==At}var It=Pt,Tt=V,Ot=Tt["__core-js_shared__"],Mt=Ot,se=Mt,_e=function(){var e=/[^.]+$/.exec(se&&se.keys&&se.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ft(e){return!!_e&&_e in e}var Et=Ft,Nt=Function.prototype,Dt=Nt.toString;function kt(e){if(e!=null){try{return Dt.call(e)}catch(t){}try{return e+""}catch(t){}}return""}var qt=kt,Ht=It,jt=Et,Ut=re,Gt=qt,zt=/[\\^$.*+?()[\]{}|]/g,Lt=/^\[object .+?Constructor\]$/,Kt=Function.prototype,Vt=Object.prototype,Wt=Kt.toString,Bt=Vt.hasOwnProperty,Yt=RegExp("^"+Wt.call(Bt).replace(zt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Xt(e){if(!Ut(e)||jt(e))return!1;var t=Ht(e)?Yt:Lt;return t.test(Gt(e))}var Jt=Xt;function Zt(e,t){return e==null?void 0:e[t]}var Qt=Zt,Rt=Jt,en=Qt;function tn(e,t){var n=en(e,t);return Rt(n)?n:void 0}var B=tn,nn=B,rn=nn(Object,"create"),Y=rn,Ce=Y;function sn(){this.__data__=Ce?Ce(null):{},this.size=0}var an=sn;function on(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var cn=on,ln=Y,un="__lodash_hash_undefined__",pn=Object.prototype,dn=pn.hasOwnProperty;function hn(e){var t=this.__data__;if(ln){var n=t[e];return n===un?void 0:n}return dn.call(t,e)?t[e]:void 0}var fn=hn,vn=Y,mn=Object.prototype,gn=mn.hasOwnProperty;function yn(e){var t=this.__data__;return vn?t[e]!==void 0:gn.call(t,e)}var bn=yn,_n=Y,Cn="__lodash_hash_undefined__";function $n(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=_n&&t===void 0?Cn:t,this}var xn=$n,Sn=an,wn=cn,An=fn,Pn=bn,In=xn;function k(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}k.prototype.clear=Sn,k.prototype.delete=wn,k.prototype.get=An,k.prototype.has=Pn,k.prototype.set=In;var Tn=k;function On(){this.__data__=[],this.size=0}var Mn=On;function Fn(e,t){return e===t||e!==e&&t!==t}var $e=Fn,En=$e;function Nn(e,t){for(var n=e.length;n--;)if(En(e[n][0],t))return n;return-1}var X=Nn,Dn=X,kn=Array.prototype,qn=kn.splice;function Hn(e){var t=this.__data__,n=Dn(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():qn.call(t,n,1),--this.size,!0}var jn=Hn,Un=X;function Gn(e){var t=this.__data__,n=Un(t,e);return n<0?void 0:t[n][1]}var zn=Gn,Ln=X;function Kn(e){return Ln(this.__data__,e)>-1}var Vn=Kn,Wn=X;function Bn(e,t){var n=this.__data__,r=Wn(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Yn=Bn,Xn=Mn,Jn=jn,Zn=zn,Qn=Vn,Rn=Yn;function q(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}q.prototype.clear=Xn,q.prototype.delete=Jn,q.prototype.get=Zn,q.prototype.has=Qn,q.prototype.set=Rn;var er=q,tr=B,nr=V,rr=tr(nr,"Map"),sr=rr,xe=Tn,ar=er,or=sr;function ir(){this.size=0,this.__data__={hash:new xe,map:new(or||ar),string:new xe}}var cr=ir;function lr(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var ur=lr,pr=ur;function dr(e,t){var n=e.__data__;return pr(t)?n[typeof t=="string"?"string":"hash"]:n.map}var J=dr,hr=J;function fr(e){var t=hr(this,e).delete(e);return this.size-=t?1:0,t}var vr=fr,mr=J;function gr(e){return mr(this,e).get(e)}var yr=gr,br=J;function _r(e){return br(this,e).has(e)}var Cr=_r,$r=J;function xr(e,t){var n=$r(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var Sr=xr,wr=cr,Ar=vr,Pr=yr,Ir=Cr,Tr=Sr;function H(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}H.prototype.clear=wr,H.prototype.delete=Ar,H.prototype.get=Pr,H.prototype.has=Ir,H.prototype.set=Tr;var Se=H,Or="__lodash_hash_undefined__";function Mr(e){return this.__data__.set(e,Or),this}var Fr=Mr;function Er(e){return this.__data__.has(e)}var Nr=Er,Dr=Se,kr=Fr,qr=Nr;function Z(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new Dr;++t<n;)this.add(e[t])}Z.prototype.add=Z.prototype.push=kr,Z.prototype.has=qr;var Hr=Z;function jr(e,t,n,r){for(var s=e.length,i=n+(r?1:-1);r?i--:++i<s;)if(t(e[i],i,e))return i;return-1}var Ur=jr;function Gr(e){return e!==e}var zr=Gr;function Lr(e,t,n){for(var r=n-1,s=e.length;++r<s;)if(e[r]===t)return r;return-1}var Kr=Lr,Vr=Ur,Wr=zr,Br=Kr;function Yr(e,t,n){return t===t?Br(e,t,n):Vr(e,Wr,n)}var Xr=Yr,Jr=Xr;function Zr(e,t){var n=e==null?0:e.length;return!!n&&Jr(e,t,0)>-1}var Qr=Zr;function Rr(e,t,n){for(var r=-1,s=e==null?0:e.length;++r<s;)if(n(t,e[r]))return!0;return!1}var es=Rr;function ts(e,t){return e.has(t)}var ns=ts,rs=B,ss=V,as=rs(ss,"Set"),os=as;function is(){}var cs=is;function ls(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var we=ls,ae=os,us=cs,ps=we,ds=1/0,hs=ae&&1/ps(new ae([,-0]))[1]==ds?function(e){return new ae(e)}:us,fs=hs,vs=Hr,ms=Qr,gs=es,ys=ns,bs=fs,_s=we,Cs=200;function $s(e,t,n){var r=-1,s=ms,i=e.length,o=!0,c=[],u=c;if(n)o=!1,s=gs;else if(i>=Cs){var f=t?null:bs(e);if(f)return _s(f);o=!1,s=ys,u=new vs}else u=t?[]:c;e:for(;++r<i;){var y=e[r],C=t?t(y):y;if(y=n||y!==0?y:0,o&&C===C){for(var _=u.length;_--;)if(u[_]===C)continue e;t&&u.push(C),c.push(y)}else s(u,C,n)||(u!==c&&u.push(C),c.push(y))}return c}var xs=$s,Ss=xs;function ws(e){return e&&e.length?Ss(e):[]}var As=ws;const Ps=ve(As);function j(){return w.useTranslation(["@nocobase/plugin-acl","client"],{nsMode:"fallback"})}const M=d.createContext({role:null});M.displayName="RolesManagerContext";const Ae=Qe.createStyles(({css:e})=>e`
|
|
11
11
|
.ant-table-cell {
|
|
12
12
|
> .ant-space-horizontal {
|
|
13
13
|
.ant-space-item-split:has(+ .ant-space-item:empty) {
|
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
`),Be=(e=[],t=[])=>{for(const n of e)t.push(n.aclSnippet),n.children&&n.children.length&&Be(n.children,t);return t},yi=({active:e})=>{const t=c.useApp(),{styles:n}=We(),{role:r}=h.useContext(F),s=c.useAPIClient(),i=c.useCompile(),o=t.pluginSettingsManager.getList(!1),l=t.pluginSettingsManager.getAclSnippets(),[u,d]=h.useState((r==null?void 0:r.snippets)||[]),y=h.useMemo(()=>ee.flatMap(o,g=>g.children?[g,...g.children]:g),[o]),C=h.useMemo(()=>u.includes("pm.*")&&u.every(g=>!g.startsWith("!pm.")),[u]),{t:b}=T.useTranslation(),{loading:S,refresh:A}=c.useRequest({resource:"roles.snippets",resourceOf:r==null?void 0:r.name,action:"list",params:{paginate:!1}},{ready:!!r&&e,refreshDeps:[r==null?void 0:r.name],manual:!0,onSuccess(g){d((g==null?void 0:g.data.filter(m=>y.find(f=>m.includes(`!${f.aclSnippet}`)||!m.startsWith("!pm."))))||[])}});if(!r)return;const $=s.resource("roles.snippets",r==null?void 0:r.name),I=(g,m)=>w(this,null,function*(){const _=Be(m==null?void 0:m.children,[]).concat(m.aclSnippet);g?(yield $.add({values:_.map(O=>"!"+O)}),A()):(yield $.remove({values:_.map(O=>"!"+O)}),A()),p.message.success(b("Saved successfully"))});return a.jsx(p.Table,{className:n,loading:S,rowKey:"key",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:b("Plugin name"),render:g=>i(g)},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:C,onChange:()=>w(this,null,function*(){const g=l.map(m=>"!"+m);C?yield $.add({values:g}):yield $.remove({values:g}),A(),p.message.success(b("Saved successfully"))})}),b("Accessible")]}),render:(g,m)=>{const f=!u.includes("!"+m.aclSnippet);return a.jsx(p.Checkbox,{checked:f,onChange:()=>I(f,m)})}}],dataSource:o.filter(g=>g.isTopLevel!==!1).map(g=>g.showTabs!==!1?g:ee.omit(g,"children"))})},_i=E.connect(e=>{const{t}=T.useTranslation();return a.jsxs(p.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:n=>{const r=["ui.*","pm","pm.*","app"],s=r.map(o=>`!${o}`),i=vi([...e.value||[],...n]).filter(o=>o&&!s.includes(o)).map(o=>!r.includes(o)||n!=null&&n.includes(o)?o:`!${o}`);for(const o of r)!i.includes(o)&&!i.includes(`!${o}`)&&i.push(`!${o}`);e.onChange(i)},children:[a.jsx("div",{style:{marginTop:16},children:a.jsx(p.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),bi=({active:e})=>{var u;const{role:t,setRole:n}=h.useContext(F),{t:r}=N(),s=c.useAPIClient(),i=(u=t==null?void 0:t.snippets)==null?void 0:u.includes("pm.*"),o=ge.useMemoizedFn(d=>w(this,null,function*(){yield s.resource("roles").update({filterByTk:t.name,values:{snippets:d.values.snippets}}),n(P(P({},t),d.values)),p.message.success(r("Saved successfully"))})),l=h.useMemo(()=>K.createForm({values:t,effects(){K.onFormValuesChange(d=>w(this,null,function*(){yield o(d)}))}}),[t,o]);return a.jsx(c.SchemaComponent,{components:{SnippetCheckboxGroup:_i,StrategyActions:mi,PluginPermissions:yi},scope:{pm:i},schema:{type:"void",name:x.uid(),"x-component":"div",properties:{general:{"x-component":"FormV2","x-component-props":{form:l},properties:{snippets:{title:r("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"}}},plugins:{"x-component":"FormV2",properties:{pluginSettings:{title:r("Plugin settings"),"x-decorator":"FormItem","x-component":"PluginPermissions","x-visible":"{{pm}}"}}}}}})},ue=h.createContext(null);ue.displayName="MenuItemsContext";const Ye=(e={})=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n],s={title:r.title,uid:r["x-uid"]};r.properties&&(s.children=Ye(r.properties)),t.push(s)}return t},Ci=()=>h.useContext(ue),Xe=e=>{var i,o;const n={url:`uiSchemas:getProperties/${c.useAdminSchemaUid()}`},r=c.useRequest(n);if(r.loading)return a.jsx(p.Spin,{});const s=Ye((o=(i=r.data)==null?void 0:i.data)==null?void 0:o.properties);return a.jsx(ue.Provider,{value:{service:r,items:s},children:e.children})},Je=e=>{if(!Array.isArray(e))return[];const t=[];for(const n of e)t.push(n.uid),t.push(...Je(n.children));return t},Ze=(e,t,n=[])=>{if(!e)return[];for(const r of e){if(n.push(r.uid),t(r))return n;if(r.children){const s=Ze(r.children,t,n);if(s.length)return s}n.pop()}return[]},Qe=(e=[],t=[])=>{for(const n of e)t.push(n.uid),n.children&&n.children.length&&Qe(n.children,t);return t},$i=({active:e})=>{const{styles:t}=We(),{role:n,setRole:r}=h.useContext(F),s=c.useAPIClient(),{items:i}=Ci(),{t:o}=T.useTranslation(),l=Je(i),[u,d]=h.useState([]),{loading:y,refresh:C}=c.useRequest({resource:"roles.menuUiSchemas",resourceOf:n.name,action:"list",params:{paginate:!1}},{ready:!!n&&e,refreshDeps:[n==null?void 0:n.name],onSuccess(m){var f;d(((f=m==null?void 0:m.data)==null?void 0:f.map(_=>_["x-uid"]))||[])}}),b=s.resource("roles.menuUiSchemas",n.name),S=l.length===u.length,A=(m,f)=>w(this,null,function*(){const _=Ze(i,M=>M.uid===f.uid),O=Qe(f==null?void 0:f.children,[]);if(m){const M=O.concat(f.uid),he=u.filter(Pi=>!M.includes(Pi));d([...he]),yield b.remove({values:M})}else{const M=O.concat(_);d(he=>ee.uniq([...he,...M])),yield b.add({values:M})}p.message.success(o("Saved successfully"))}),$=m=>m.map(f=>{const _=o(f.title);return f.children?D(P({},f),{title:_,children:$(f.children)}):D(P({},f),{title:_})}),I=ge.useMemoizedFn(m=>w(this,null,function*(){yield s.resource("roles").update({filterByTk:n.name,values:m.values}),r(P(P({},n),m.values)),p.message.success(o("Saved successfully"))})),g=h.useMemo(()=>K.createForm({values:n,effects(){K.onFormValuesChange(m=>w(this,null,function*(){yield I(m)}))}}),[n,I]);return a.jsxs(a.Fragment,{children:[a.jsx(c.SchemaComponent,{schema:{type:"void",name:x.uid(),"x-component":"FormV2","x-component-props":{form:g},properties:{allowNewMenu:{title:o("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":o("New menu items are allowed to be accessed by default.")}}}}),a.jsx(p.Table,{className:t,loading:y,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:o("Menu item title")},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:S,onChange:m=>w(this,null,function*(){S?yield b.set({values:[]}):yield b.set({values:l}),C(),p.message.success(o("Saved successfully"))})})," ",o("Accessible")]}),render:(m,f)=>{const _=u.includes(f.uid);return a.jsx(p.Checkbox,{checked:_,onChange:()=>A(_,f)})}}],dataSource:$(i)})]})},pe=e=>a.jsx("div",{style:{maxHeight:"60vh",overflowY:"auto"},children:e.children}),xi=({active:e})=>{var b;const{t}=N(),[n,r]=h.useState("general"),{role:s,setRole:i}=h.useContext(F),o=(b=s==null?void 0:s.snippets)==null?void 0:b.includes("pm.*"),u=c.useApp().getComponent("DataSourcePermissionManager"),d=h.useMemo(()=>[{key:"general",label:t("System"),children:a.jsx(pe,{children:a.jsx(bi,{active:n==="general"&&e})})},{key:"menu",label:t("Menu"),children:a.jsx(pe,{children:a.jsx(Xe,{children:a.jsx($i,{active:n==="menu"&&e})})})},...u?[{key:"dataSource",label:t("Data sources"),children:a.jsx(pe,{children:a.jsx(Xe,{children:a.jsx(u,{role:s,active:n==="dataSource"&&e})})})}]:[]],[o,n,e,t]),y=c.useAPIClient(),{data:C}=c.useRequest(()=>y.resource("roles").get({filterByTk:s==null?void 0:s.name}).then(S=>{var $,I;const A=($=S==null?void 0:S.data)==null?void 0:$.data;return(I=A.snippets)==null||I.forEach(g=>{A[g]=!0}),A}),{ready:e&&!!s,refreshDeps:[s==null?void 0:s.name]});return h.useEffect(()=>{r("general")},[s==null?void 0:s.name]),h.useEffect(()=>{i(C)},[C]),a.jsx(go,{children:a.jsx(p.Tabs,{type:"card",activeKey:n,onChange:S=>r(S),items:d})})},Si=()=>{const{t:e}=N();return a.jsx(c.SchemaComponent,{scope:{t:e},schema:{type:"void",properties:{newRole:{type:"void",title:e("New role"),"x-component":"Action","x-component-props":{type:"text",icon:"PlusOutlined",style:{width:"100%",textAlign:"left"}},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(t){const n=c.useActionContext();return c.useRequest(()=>Promise.resolve({data:{name:`r_${x.uid()}`,snippets:["!ui.*","!pm","!pm.*"]}}),D(P({},t),{refreshDeps:[n.visible]}))}},title:e("New role"),properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}}})},Re={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},wi=()=>{const{t:e}=N(),t=c.usePlugin(de),[n,r]=h.useState("permissions"),s=Array.from(t.rolesManager.list()).map(([u,d])=>({key:u,label:E.Schema.compile(d.title,{t:e}),children:d.Component?h.createElement(d.Component,{active:n===u}):null})),[i,o]=h.useState(null),l=c.useSchemaComponentContext();return a.jsx(c.SchemaComponentContext.Provider,{value:D(P({},l),{designable:!1}),children:a.jsx(F.Provider,{value:{role:i,setRole:o},children:a.jsx(p.Card,{children:a.jsxs(p.Row,{gutter:24,style:{flexWrap:"nowrap"},children:[a.jsx(p.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"250px"},children:a.jsx(c.ResourceActionProvider,{collection:Re,request:{resource:"roles",action:"list",params:{filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}},children:a.jsxs(c.CollectionProvider_deprecated,{collection:Re,children:[a.jsx(p.Row,{children:a.jsx(Si,{})}),a.jsx(p.Divider,{style:{margin:"12px 0"}}),a.jsx(Q,{})]})})}),a.jsx(p.Col,{flex:"auto",style:{overflow:"hidden"},children:a.jsx(p.Tabs,{activeKey:n,onChange:u=>r(u),items:[{key:"permissions",label:e("Permissions"),children:a.jsx(xi,{active:n==="permissions"})},...s]})})]})})})})};class Ai{constructor(){ve(this,"rolesManager",new j.Registry)}add(t,n){this.rolesManager.register(t,n)}list(){return this.rolesManager.getEntities()}}class de extends c.Plugin{constructor(){super(...arguments);ve(this,"rolesManager",new Ai)}load(){return w(this,null,function*(){this.pluginSettingsManager.add("users-permissions.roles",{title:this.t("Roles & Permissions"),icon:"LockOutlined",Component:wi,aclSnippet:"pm.acl.roles",sort:3})})}}v.PluginACLClient=de,v.RolesManagerContext=F,v.default=de,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
18
|
+
`),Pe=(e=[],t=[])=>{for(const n of e)t.push(n.aclSnippet),n.children&&n.children.length&&Pe(n.children,t);return t},Is=({active:e})=>{const t=l.useApp(),{styles:n}=Ae(),{role:r}=d.useContext(M),s=l.useAPIClient(),i=l.useCompile(),o=t.pluginSettingsManager.getList(!1),c=t.pluginSettingsManager.getAclSnippets(),[u,f]=d.useState((r==null?void 0:r.snippets)||[]),y=d.useMemo(()=>te.flatMap(o,g=>g.children?[g,...g.children]:g),[o]),C=d.useMemo(()=>u.includes("pm.*")&&u.every(g=>!g.startsWith("!pm.")),[u]),{t:_}=w.useTranslation(),{loading:A,refresh:P}=l.useRequest({resource:"roles.snippets",resourceOf:r==null?void 0:r.name,action:"list",params:{paginate:!1}},{ready:!!r&&e,refreshDeps:[r==null?void 0:r.name],manual:!0,onSuccess(g){f((g==null?void 0:g.data.filter(m=>y.find(h=>m.includes(`!${h.aclSnippet}`)||!m.startsWith("!pm."))))||[])}});if(!r)return;const S=s.resource("roles.snippets",r==null?void 0:r.name),F=(g,m)=>$(this,null,function*(){const b=Pe(m==null?void 0:m.children,[]).concat(m.aclSnippet);g?(yield S.add({values:b.map(I=>"!"+I)}),P()):(yield S.remove({values:b.map(I=>"!"+I)}),P()),p.message.success(_("Saved successfully"))});return a.jsx(p.Table,{className:n,loading:A,rowKey:"key",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:_("Plugin name"),render:g=>i(g)},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:C,onChange:()=>$(this,null,function*(){const g=c.map(m=>"!"+m);C?yield S.add({values:g}):yield S.remove({values:g}),P(),p.message.success(_("Saved successfully"))})}),_("Accessible")]}),render:(g,m)=>{const h=!u.includes("!"+m.aclSnippet);return a.jsx(p.Checkbox,{checked:h,onChange:()=>F(h,m)})}}],dataSource:o.filter(g=>g.isTopLevel!==!1).map(g=>g.showTabs!==!1?g:te.omit(g,"children"))})},oe=d.createContext([]);oe.displayName="AvailableActionsContext";const Ts=e=>{const{data:t,loading:n}=l.useRequest({resource:"availableActions",action:"list"});return n?a.jsx(p.Spin,{}):a.jsx(oe.Provider,{value:t==null?void 0:t.data,children:e.children})},Os=()=>d.useContext(oe),Ms=e=>{var n;if(!e)return{};const t={};return(n=e==null?void 0:e.forEach)==null||n.call(e,r=>{const[s,i]=r.split(":");t[s]=i||"all"}),t},Ie=e=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n];r==="all"?t.push(n):t.push(`${n}:${r}`)}return t},Fs=O.connect(e=>{const{onChange:t}=e,n=Os(),r=l.useCompile(),{t:s}=w.useTranslation(),i=O.useField(),o=Ms(i.value);return a.jsx("div",{children:a.jsx(p.Table,{rowKey:"name",size:"small",pagination:!1,columns:[{dataIndex:"displayName",title:s("Action display name"),render:c=>r(c)},{dataIndex:"onNewRecord",title:s("Action type"),render:c=>c?a.jsx(p.Tag,{color:"green",children:s("Action on new records")}):a.jsx(p.Tag,{color:"geekblue",children:s("Action on existing records")})},{dataIndex:"enabled",title:s("Allow"),render:(c,u)=>a.jsx(p.Checkbox,{checked:c,"aria-label":`${u.name}_checkbox`,onChange:f=>{c?delete o[u.name]:o[u.name]="all",t(Ie(o))}})},{dataIndex:"scope",title:s("Data scope"),render:(c,u)=>!u.onNewRecord&&a.jsx(p.Select,{"data-testid":"select-data-scope",popupMatchSelectWidth:!1,size:"small",value:c,options:[{label:s("All records"),value:"all"},{label:s("Own records"),value:"own"}],onChange:f=>{o[u.name]=f,t(Ie(o))}})}],dataSource:n==null?void 0:n.map(c=>{let u="all",f=!1;return o[c.name]&&(f=!0,u=o[c.name]),E(x({},c),{enabled:f,scope:u})})})})}),Es=O.connect(e=>{const{t}=w.useTranslation();return a.jsxs(p.Checkbox.Group,{style:{width:"100%",display:"block"},value:e.value,onChange:n=>{const r=["ui.*","pm","pm.*","app"],s=r.map(o=>`!${o}`),i=Ps([...e.value||[],...n]).filter(o=>o&&!s.includes(o)).map(o=>!r.includes(o)||n!=null&&n.includes(o)?o:`!${o}`);for(const o of r)!i.includes(o)&&!i.includes(`!${o}`)&&i.push(`!${o}`);e.onChange(i)},children:[a.jsx("div",{style:{marginTop:16},children:a.jsx(p.Checkbox,{value:"ui.*",children:t("Allows to configure interface")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm",children:t("Allows to install, activate, disable plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"pm.*",children:t("Allows to configure plugins")})}),a.jsx("div",{style:{marginTop:8},children:a.jsx(p.Checkbox,{value:"app",children:t("Allows to clear cache, reboot application")})})]})}),Ns=()=>{var c;const{role:e,setRole:t}=d.useContext(M),{t:n}=j(),r=l.useAPIClient(),s=(c=e==null?void 0:e.snippets)==null?void 0:c.includes("pm.*"),i=L.useMemoizedFn(u=>$(this,null,function*(){yield r.resource("roles").update({filterByTk:e.name,values:{snippets:u.values.snippets}}),t(x(x({},e),u.values)),p.message.success(n("Saved successfully"))})),o=d.useMemo(()=>N.createForm({values:e,effects(){N.onFormValuesChange(u=>$(this,null,function*(){yield i(u)}))}}),[e,i]);return a.jsx(l.SchemaComponent,{components:{SnippetCheckboxGroup:Es,StrategyActions:Fs,PluginPermissions:Is},scope:{pm:s},schema:{type:"void",name:D.uid(),"x-component":"div",properties:{general:{"x-component":"FormV2","x-component-props":{form:o},properties:{snippets:{title:n("Configure permissions"),type:"boolean","x-decorator":"FormItem","x-component":"SnippetCheckboxGroup"}}},plugins:{"x-component":"FormV2",properties:{pluginSettings:{title:n("Plugin settings"),"x-decorator":"FormItem","x-component":"PluginPermissions","x-visible":"{{pm}}"}}}}}})},ie=d.createContext(null);ie.displayName="MenuItemsContext";const Te=(e={})=>{const t=[];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=e[n],s={title:r.title,uid:r["x-uid"]};r.properties&&(s.children=Te(r.properties)),t.push(s)}return t},Ds=()=>d.useContext(ie),ks=e=>{var i,o;const n={url:`uiSchemas:getProperties/${l.useAdminSchemaUid()}`},r=l.useRequest(n);if(r.loading)return a.jsx(p.Spin,{});const s=Te((o=(i=r.data)==null?void 0:i.data)==null?void 0:o.properties);return a.jsx(ie.Provider,{value:{service:r,items:s},children:e.children})},Oe=e=>{if(!Array.isArray(e))return[];const t=[];for(const n of e)t.push(n.uid),t.push(...Oe(n.children));return t},Me=(e,t,n=[])=>{if(!e)return[];for(const r of e){if(n.push(r.uid),t(r))return n;if(r.children){const s=Me(r.children,t,n);if(s.length)return s}n.pop()}return[]},Fe=(e=[],t=[])=>{for(const n of e)t.push(n.uid),n.children&&n.children.length&&Fe(n.children,t);return t},qs=({active:e})=>{const{styles:t}=Ae(),{role:n,setRole:r}=d.useContext(M),s=l.useAPIClient(),{items:i}=Ds(),{t:o}=w.useTranslation(),c=Oe(i),[u,f]=d.useState([]),{loading:y,refresh:C}=l.useRequest({resource:"roles.menuUiSchemas",resourceOf:n.name,action:"list",params:{paginate:!1}},{ready:!!n&&e,refreshDeps:[n==null?void 0:n.name],onSuccess(m){var h;f(((h=m==null?void 0:m.data)==null?void 0:h.map(b=>b["x-uid"]))||[])}}),_=s.resource("roles.menuUiSchemas",n.name),A=c.length===u.length,P=(m,h)=>$(this,null,function*(){const b=Me(i,T=>T.uid===h.uid),I=Fe(h==null?void 0:h.children,[]);if(m){const T=I.concat(h.uid),de=u.filter(Ii=>!T.includes(Ii));f([...de]),yield _.remove({values:T})}else{const T=I.concat(b);f(de=>te.uniq([...de,...T])),yield _.add({values:T})}p.message.success(o("Saved successfully"))}),S=m=>m.map(h=>{const b=o(h.title);return h.children?E(x({},h),{title:b,children:S(h.children)}):E(x({},h),{title:b})}),F=L.useMemoizedFn(m=>$(this,null,function*(){yield s.resource("roles").update({filterByTk:n.name,values:m.values}),r(x(x({},n),m.values)),p.message.success(o("Saved successfully"))})),g=d.useMemo(()=>N.createForm({values:n,effects(){N.onFormValuesChange(m=>$(this,null,function*(){yield F(m)}))}}),[n,F]);return a.jsxs(a.Fragment,{children:[a.jsx(l.SchemaComponent,{schema:{type:"void",name:D.uid(),"x-component":"FormV2","x-component-props":{form:g},properties:{allowNewMenu:{title:o("Menu permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":o("New menu items are allowed to be accessed by default.")}}}}),a.jsx(p.Table,{className:t,loading:y,rowKey:"uid",pagination:!1,expandable:{defaultExpandAllRows:!0},columns:[{dataIndex:"title",title:o("Menu item title")},{dataIndex:"accessible",title:a.jsxs(a.Fragment,{children:[a.jsx(p.Checkbox,{checked:A,onChange:m=>$(this,null,function*(){A?yield _.set({values:[]}):yield _.set({values:c}),C(),p.message.success(o("Saved successfully"))})})," ",o("Accessible")]}),render:(m,h)=>{const b=u.includes(h.uid);return a.jsx(p.Checkbox,{checked:b,onChange:()=>P(b,h)})}}],dataSource:S(i)})]})};class Hs{constructor(){z(this,"permissionsTabs",[({t,TabLayout:n})=>({key:"general",label:t("System"),children:a.jsx(n,{children:a.jsx(Ns,{})})}),({activeKey:t,t:n,TabLayout:r})=>({key:"menu",label:n("Menu"),children:a.jsx(r,{children:a.jsx(ks,{children:a.jsx(qs,{active:t==="menu"})})})})])}addPermissionsTab(t){this.permissionsTabs.push(t)}getPermissionsTabs(t){return this.permissionsTabs.map(n=>typeof n=="function"?n(t):n)}}var js=Array.isArray,G=js;function Us(e){return e!=null&&typeof e=="object"}var ce=Us,Gs=ne,zs=ce,Ls="[object Symbol]";function Ks(e){return typeof e=="symbol"||zs(e)&&Gs(e)==Ls}var le=Ks,Vs=G,Ws=le,Bs=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ys=/^\w*$/;function Xs(e,t){if(Vs(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Ws(e)?!0:Ys.test(e)||!Bs.test(e)||t!=null&&e in Object(t)}var Js=Xs,Ee=Se,Zs="Expected a function";function ue(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(Zs);var n=function(){var r=arguments,s=t?t.apply(this,r):r[0],i=n.cache;if(i.has(s))return i.get(s);var o=e.apply(this,r);return n.cache=i.set(s,o)||i,o};return n.cache=new(ue.Cache||Ee),n}ue.Cache=Ee;var Qs=ue,Rs=Qs,ea=500;function ta(e){var t=Rs(e,function(r){return n.size===ea&&n.clear(),r}),n=t.cache;return t}var na=ta,ra=na,sa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,aa=/\\(\\)?/g,oa=ra(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(sa,function(n,r,s,i){t.push(s?i.replace(aa,"$1"):r||n)}),t}),ia=oa;function ca(e,t){for(var n=-1,r=e==null?0:e.length,s=Array(r);++n<r;)s[n]=t(e[n],n,e);return s}var la=ca,Ne=W,ua=la,pa=G,da=le,ha=1/0,De=Ne?Ne.prototype:void 0,ke=De?De.toString:void 0;function qe(e){if(typeof e=="string")return e;if(pa(e))return ua(e,qe)+"";if(da(e))return ke?ke.call(e):"";var t=e+"";return t=="0"&&1/e==-ha?"-0":t}var fa=qe,va=fa;function ma(e){return e==null?"":va(e)}var ga=ma,ya=G,ba=Js,_a=ia,Ca=ga;function $a(e,t){return ya(e)?e:ba(e,t)?[e]:_a(Ca(e))}var Q=$a,xa=le,Sa=1/0;function wa(e){if(typeof e=="string"||xa(e))return e;var t=e+"";return t=="0"&&1/e==-Sa?"-0":t}var pe=wa,Aa=Q,Pa=pe;function Ia(e,t){t=Aa(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[Pa(t[n++])];return n&&n==r?e:void 0}var Ta=Ia,Oa=B,Ma=function(){try{var e=Oa(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),He=Ma,je=He;function Fa(e,t,n){t=="__proto__"&&je?je(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Ea=Fa,Na=Ea,Da=$e,ka=Object.prototype,qa=ka.hasOwnProperty;function Ha(e,t,n){var r=e[t];(!(qa.call(e,t)&&Da(r,n))||n===void 0&&!(t in e))&&Na(e,t,n)}var ja=Ha,Ua=9007199254740991,Ga=/^(?:0|[1-9]\d*)$/;function za(e,t){var n=typeof e;return t=t==null?Ua:t,!!t&&(n=="number"||n!="symbol"&&Ga.test(e))&&e>-1&&e%1==0&&e<t}var Ue=za,La=ja,Ka=Q,Va=Ue,Ge=re,Wa=pe;function Ba(e,t,n,r){if(!Ge(e))return e;t=Ka(t,e);for(var s=-1,i=t.length,o=i-1,c=e;c!=null&&++s<i;){var u=Wa(t[s]),f=n;if(u==="__proto__"||u==="constructor"||u==="prototype")return e;if(s!=o){var y=c[u];f=r?r(y,u,c):void 0,f===void 0&&(f=Ge(y)?y:Va(t[s+1])?[]:{})}La(c,u,f),c=c[u]}return e}var Ya=Ba,Xa=Ta,Ja=Ya,Za=Q;function Qa(e,t,n){for(var r=-1,s=t.length,i={};++r<s;){var o=t[r],c=Xa(e,o);n(c,o)&&Ja(i,Za(o,e),c)}return i}var Ra=Qa;function eo(e,t){return e!=null&&t in Object(e)}var to=eo,no=ne,ro=ce,so="[object Arguments]";function ao(e){return ro(e)&&no(e)==so}var oo=ao,ze=oo,io=ce,Le=Object.prototype,co=Le.hasOwnProperty,lo=Le.propertyIsEnumerable,uo=ze(function(){return arguments}())?ze:function(e){return io(e)&&co.call(e,"callee")&&!lo.call(e,"callee")},Ke=uo,po=9007199254740991;function ho(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=po}var fo=ho,vo=Q,mo=Ke,go=G,yo=Ue,bo=fo,_o=pe;function Co(e,t,n){t=vo(t,e);for(var r=-1,s=t.length,i=!1;++r<s;){var o=_o(t[r]);if(!(i=e!=null&&n(e,o)))break;e=e[o]}return i||++r!=s?i:(s=e==null?0:e.length,!!s&&bo(s)&&yo(o,s)&&(go(e)||mo(e)))}var $o=Co,xo=to,So=$o;function wo(e,t){return e!=null&&So(e,t,xo)}var Ao=wo,Po=Ra,Io=Ao;function To(e,t){return Po(e,t,function(n,r){return Io(e,r)})}var Oo=To;function Mo(e,t){for(var n=-1,r=t.length,s=e.length;++n<r;)e[s+n]=t[n];return e}var Fo=Mo,Ve=W,Eo=Ke,No=G,We=Ve?Ve.isConcatSpreadable:void 0;function Do(e){return No(e)||Eo(e)||!!(We&&e&&e[We])}var ko=Do,qo=Fo,Ho=ko;function Be(e,t,n,r,s){var i=-1,o=e.length;for(n||(n=Ho),s||(s=[]);++i<o;){var c=e[i];t>0&&n(c)?t>1?Be(c,t-1,n,r,s):qo(s,c):r||(s[s.length]=c)}return s}var jo=Be,Uo=jo;function Go(e){var t=e==null?0:e.length;return t?Uo(e,1):[]}var zo=Go;function Lo(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var Ko=Lo,Vo=Ko,Ye=Math.max;function Wo(e,t,n){return t=Ye(t===void 0?e.length-1:t,0),function(){for(var r=arguments,s=-1,i=Ye(r.length-t,0),o=Array(i);++s<i;)o[s]=r[t+s];s=-1;for(var c=Array(t+1);++s<t;)c[s]=r[s];return c[t]=n(o),Vo(e,this,c)}}var Bo=Wo;function Yo(e){return function(){return e}}var Xo=Yo;function Jo(e){return e}var Zo=Jo,Qo=Xo,Xe=He,Ro=Zo,ei=Xe?function(e,t){return Xe(e,"toString",{configurable:!0,enumerable:!1,value:Qo(t),writable:!0})}:Ro,ti=ei,ni=800,ri=16,si=Date.now;function ai(e){var t=0,n=0;return function(){var r=si(),s=ri-(r-n);if(n=r,s>0){if(++t>=ni)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var oi=ai,ii=ti,ci=oi,li=ci(ii),ui=li,pi=zo,di=Bo,hi=ui;function fi(e){return hi(di(e,void 0,pi),e+"")}var vi=fi,mi=Oo,gi=vi,yi=gi(function(e,t){return e==null?{}:mi(e,t)}),bi=yi;const _i=ve(bi),Ci={type:"object",properties:{[D.uid()]:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:e=>{const t=l.useRecord(),n=l.useRequest(()=>Promise.resolve({data:_i(t,["title","name","default"])}),E(x({},e),{manual:!0})),r=l.useActionContext();return d.useEffect(()=>{r.visible&&n.run()},[r.visible]),n}},title:'{{t("Edit role")}}',properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem","x-disabled":!0},default:{title:"","x-component":"CollectionField","x-decorator":"FormItem","x-content":'{{t("Default role")}}',"x-reactions":e=>{e.initialValue?e.disabled=!0:e.disabled=!1}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useUpdateAction }}"}}}}}}}},$i=({loadMore:e})=>{const[t,n]=d.useState(null),r=d.useRef(null),s=d.useCallback(i=>{i&&(r.current&&r.current.disconnect(),r.current=new IntersectionObserver(o=>{o.forEach(c=>{c.target===i.current&&c.isIntersecting&&(r.current&&r.current.unobserve(i.current),e())})}),i.current&&r.current&&r.current.observe(i.current))},[e]);return d.useEffect(()=>(s(t),()=>{r.current&&r.current.disconnect()}),[t,s]),{lastItem:t,setLastItem:n}},R=()=>{const{t:e}=j(),{data:t,mutate:n}=l.useResourceActionContext(),[r,s]=d.useState(!1),[i,o]=d.useState(null),{role:c,setRole:u}=d.useContext(M),[f,y]=d.useState([]),[C,_]=d.useState(!1),A=l.useAPIClient(),P=d.useCallback(()=>$(this,null,function*(){const h=t==null?void 0:t.meta;if(!h||h.page>=h.totalPage)return;_(!0);const b=yield A.resource("roles").list({page:h.page+1,pageSize:h.pageSize,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]});n((b==null?void 0:b.data)||{}),_(!1)}),[t]),{lastItem:S,setLastItem:F}=$i({loadMore:P}),g=({key:h})=>{u(f.find(b=>b.name===h))};d.useEffect(()=>{f[0]&&u(f[0])},[f,u]),d.useEffect(()=>{var b,I;if(!((b=t==null?void 0:t.data)!=null&&b.length))return;const h=d.createRef();F(h),((I=t.meta)==null?void 0:I.page)>1?y(T=>T.concat(t.data)):y(t.data)},[t,F]);const m=d.useMemo(()=>f.map((h,b)=>({key:h.name,label:b===f.length-1?a.jsx("div",{ref:S,children:a.jsx(R.Item,{item:h,onEdit:()=>{s(!0),o(h)}})}):a.jsx(R.Item,{item:h,onEdit:()=>{s(!0),o(h)}})})),[f,S]);return a.jsxs(a.Fragment,{children:[f.length?a.jsx(p.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:[...m,...C?[{key:"loading",label:a.jsx(p.Spin,{})}]:[]],selectedKeys:[c==null?void 0:c.name],onSelect:g}):a.jsx(p.Empty,{image:p.Empty.PRESENTED_IMAGE_SIMPLE}),a.jsx(l.ActionContextProvider,{value:{visible:r,setVisible:s},children:a.jsx(l.RecordProvider,{record:i,collectionName:"departments",children:a.jsx(l.SchemaComponent,{scope:{t:e},schema:Ci})})})]})};R.Item=function({item:t,onEdit:n}){const{t:r}=j(),{refreshAsync:s}=l.useResourceActionContext(),{modal:i,message:o}=p.App.useApp(),c=l.useAPIClient(),u=()=>{i.confirm({title:r("Delete"),content:r("Are you sure you want to delete it?"),onOk:()=>$(this,null,function*(){yield c.resource("roles").destroy({filterByTk:t.name}),o.success(r("Deleted successfully")),yield s()})})},f=({key:C,domEvent:_})=>{switch(_.stopPropagation(),C){case"edit":n();break;case"delete":u()}},y=O.Schema.compile(t.title,{t:r});return a.jsxs(p.Row,{children:[a.jsx(p.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"},children:a.jsxs("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"},children:[a.jsx(fe.TagOutlined,{}),a.jsx("span",{style:{marginLeft:"10px"},title:y,children:y})]})}),a.jsxs(p.Col,{children:[t.default?a.jsx(p.Tag,{color:"success",bordered:!1,children:r("Default")}):null,a.jsx(p.Dropdown,{menu:{items:[{label:r("Edit"),key:"edit"},{label:r("Delete"),key:"delete"}],onClick:f},children:a.jsx(fe.MoreOutlined,{})})]})]})};const xi=e=>a.jsx("div",{style:{maxHeight:"60vh",overflowY:"auto"},children:e.children}),Si=({active:e})=>{const{t}=j(),[n,r]=d.useState("general"),{role:s,setRole:i}=d.useContext(M),o=l.usePlugin(ee),c=d.useMemo(()=>o.settingsUI.getPermissionsTabs({t,activeKey:n,TabLayout:xi,role:s}),[n,o.settingsUI,s,t]),u=l.useAPIClient(),{data:f}=l.useRequest(()=>u.resource("roles").get({filterByTk:s==null?void 0:s.name}).then(y=>{var _,A;const C=(_=y==null?void 0:y.data)==null?void 0:_.data;return(A=C.snippets)==null||A.forEach(P=>{C[P]=!0}),C}),{ready:e&&!!s,refreshDeps:[s==null?void 0:s.name]});return d.useEffect(()=>{r("general")},[s==null?void 0:s.name]),d.useEffect(()=>{i(f)},[f,i]),a.jsx(Ts,{children:a.jsx(p.Tabs,{type:"card",activeKey:n,onChange:y=>r(y),items:c})})},wi=()=>{const{t:e}=j();return a.jsx(l.SchemaComponent,{scope:{t:e},schema:{type:"void",properties:{newRole:{type:"void",title:e("New role"),"x-component":"Action","x-component-props":{type:"text",icon:"PlusOutlined",style:{width:"100%",textAlign:"left"}},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues(t){const n=l.useActionContext();return l.useRequest(()=>Promise.resolve({data:{name:`r_${D.uid()}`,snippets:["!ui.*","!pm","!pm.*"]}}),E(x({},t),{refreshDeps:[n.visible]}))}},title:e("New role"),properties:{title:{"x-component":"CollectionField","x-decorator":"FormItem"},name:{"x-component":"CollectionField","x-decorator":"FormItem",description:'{{t("Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.")}}'},default:{"x-component":"CollectionField","x-decorator":"FormItem",title:"","x-content":'{{t("Default role")}}'},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{cancel:{title:'{{t("Cancel")}}',"x-component":"Action","x-component-props":{useAction:"{{ cm.useCancelAction }}"}},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary",useAction:"{{ cm.useCreateAction }}"}}}}}}}}}}})},Je={name:"roles",filterTargetKey:"name",targetKey:"name",fields:[{type:"string",name:"title",interface:"input",uiSchema:{title:'{{t("Role display name")}}',type:"number","x-component":"Input",required:!0}},{type:"string",name:"name",interface:"input",uiSchema:{title:'{{t("Role UID")}}',type:"string","x-component":"Input"}},{type:"boolean",name:"default",interface:"boolean",uiSchema:{title:'{{t("Default role")}}',type:"boolean","x-component":"Checkbox"}}]},Ai=()=>{const{t:e}=j(),t=l.usePlugin(ee),[n,r]=d.useState("permissions"),s=Array.from(t.rolesManager.list()).map(([u,f])=>({key:u,label:O.Schema.compile(f.title,{t:e}),children:f.Component?d.createElement(f.Component,{active:n===u}):null})),[i,o]=d.useState(null),c=l.useSchemaComponentContext();return a.jsx(l.SchemaComponentContext.Provider,{value:E(x({},c),{designable:!1}),children:a.jsx(M.Provider,{value:{role:i,setRole:o},children:a.jsx(p.Card,{children:a.jsxs(p.Row,{gutter:24,style:{flexWrap:"nowrap"},children:[a.jsx(p.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"250px"},children:a.jsx(l.ResourceActionProvider,{collection:Je,request:{resource:"roles",action:"list",params:{filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}},children:a.jsxs(l.CollectionProvider_deprecated,{collection:Je,children:[a.jsx(p.Row,{children:a.jsx(wi,{})}),a.jsx(p.Divider,{style:{margin:"12px 0"}}),a.jsx(R,{})]})})}),a.jsx(p.Col,{flex:"auto",style:{overflow:"hidden"},children:a.jsx(p.Tabs,{activeKey:n,onChange:u=>r(u),items:[{key:"permissions",label:e("Permissions"),children:a.jsx(Si,{active:n==="permissions"})},...s]})})]})})})})};class Pi{constructor(){z(this,"rolesManager",new Re.Registry)}add(t,n){this.rolesManager.register(t,n)}list(){return this.rolesManager.getEntities()}}class ee extends l.Plugin{constructor(){super(...arguments);z(this,"rolesManager",new Pi);z(this,"settingsUI",new Hs)}load(){return $(this,null,function*(){this.pluginSettingsManager.add("users-permissions.roles",{title:this.t("Roles & Permissions"),icon:"LockOutlined",Component:Ai,aclSnippet:"pm.acl.roles",sort:3})})}}v.PluginACLClient=ee,v.RolesManagerContext=M,v.default=ee,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/externalVersion.js
CHANGED
|
@@ -8,24 +8,24 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
11
|
-
"
|
|
11
|
+
"antd": "5.12.8",
|
|
12
12
|
"react": "18.2.0",
|
|
13
|
+
"@nocobase/client": "1.3.16-beta",
|
|
13
14
|
"@formily/shared": "2.3.0",
|
|
14
|
-
"antd": "5.12.8",
|
|
15
15
|
"@formily/react": "2.3.0",
|
|
16
16
|
"@ant-design/icons": "5.2.6",
|
|
17
17
|
"react-i18next": "11.18.6",
|
|
18
|
-
"@nocobase/utils": "1.3.
|
|
19
|
-
"@nocobase/actions": "1.3.
|
|
20
|
-
"@nocobase/cache": "1.3.
|
|
21
|
-
"@nocobase/database": "1.3.
|
|
22
|
-
"@nocobase/server": "1.3.
|
|
18
|
+
"@nocobase/utils": "1.3.16-beta",
|
|
19
|
+
"@nocobase/actions": "1.3.16-beta",
|
|
20
|
+
"@nocobase/cache": "1.3.16-beta",
|
|
21
|
+
"@nocobase/database": "1.3.16-beta",
|
|
22
|
+
"@nocobase/server": "1.3.16-beta",
|
|
23
23
|
"async-mutex": "0.3.2",
|
|
24
24
|
"lodash": "4.17.21",
|
|
25
|
-
"@nocobase/test": "1.3.
|
|
25
|
+
"@nocobase/test": "1.3.16-beta",
|
|
26
26
|
"@formily/core": "2.3.0",
|
|
27
27
|
"ahooks": "3.7.8",
|
|
28
28
|
"@formily/antd-v5": "1.1.9",
|
|
29
29
|
"antd-style": "3.4.5",
|
|
30
|
-
"@nocobase/acl": "1.3.
|
|
30
|
+
"@nocobase/acl": "1.3.16-beta"
|
|
31
31
|
};
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"displayName.zh-CN": "权限控制",
|
|
5
5
|
"description": "Based on roles, resources, and actions, access control can precisely manage interface configuration permissions, data operation permissions, menu access permissions, and plugin permissions.",
|
|
6
6
|
"description.zh-CN": "基于角色、资源和操作的权限控制,可以精确控制界面配置权限、数据操作权限、菜单访问权限、插件权限。",
|
|
7
|
-
"version": "1.3.
|
|
7
|
+
"version": "1.3.16-beta",
|
|
8
8
|
"license": "AGPL-3.0",
|
|
9
9
|
"main": "./dist/server/index.js",
|
|
10
10
|
"homepage": "https://docs.nocobase.com/handbook/acl",
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
35
35
|
"directory": "packages/plugins/acl"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "28fae8fe9165b82d6ee4d4104cd81530aa897176"
|
|
38
38
|
}
|