@nocobase/plugin-acl 1.7.0-beta.8 → 1.7.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/521fd10515e7f9e6.js +10 -0
- package/dist/client/RoleModeSelect.d.ts +10 -0
- package/dist/client/index.js +1 -1
- package/dist/externalVersion.js +11 -11
- package/dist/locale/en-US.json +12 -1
- package/dist/locale/zh-CN.json +13 -2
- package/dist/server/actions/role-check.d.ts +0 -8
- package/dist/server/actions/role-check.js +27 -17
- package/dist/server/actions/union-role.d.ts +9 -0
- package/dist/server/actions/union-role.js +48 -0
- package/dist/server/collections/systemSettings.d.ts +6 -0
- package/dist/server/collections/systemSettings.js +42 -0
- package/dist/server/constants.d.ts +9 -0
- package/dist/server/constants.js +36 -0
- package/dist/server/enum.d.ts +14 -0
- package/dist/server/enum.js +43 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +5 -1
- package/dist/server/middlewares/setCurrentRole.js +25 -1
- package/dist/server/middlewares/with-acl-meta.js +1 -0
- package/dist/server/server.js +4 -1
- package/package.json +2 -2
- package/dist/client/e38fd71a1d7e556e.js +0 -10
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
|
|
10
|
+
"use strict";(self.webpackChunk_nocobase_plugin_acl=self.webpackChunk_nocobase_plugin_acl||[]).push([["787"],{761:function(e,t,n){n.r(t),n.d(t,{RolesManagement:function(){return q}});var r=n("505"),o=n("772"),l=n("721"),a=n("156"),i=n.n(a),c=n("371"),u=n("888"),s=n("875"),f=function(){var e=(0,u.g)().t;return i().createElement(o.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:{textAlign:"left"}},properties:{drawer:{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:function(e){var t,n,r=(0,o.useActionContext)();return(0,o.useRequest)(function(){return Promise.resolve({data:{name:"r_".concat((0,s.uid)()),snippets:["!ui.*","!pm","!pm.*"]}})},(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,l;r=e,o=t,l=n[t],o in r?Object.defineProperty(r,o,{value:l,enumerable:!0,configurable:!0,writable:!0}):r[o]=l})}return e}({},e),n=(n={refreshDeps:[r.visible]},n),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t))}},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 }}"}}}}}}}}}}})},m=n("746"),p=n("482"),d=n("467");function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b={type:"object",properties:y({},(0,s.uid)(),{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:function(e){var t,n,r=(0,o.useRecord)();var l=(0,o.useRequest)(function(){return Promise.resolve({data:(0,d.pick)(r,["title","name","default"])})},(t=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){y(e,t,n[t])})}return e}({},e),n=(n={manual:!0},n),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)),i=(0,o.useActionContext)();return(0,a.useEffect)(function(){i.visible&&l.run()},[i.visible]),l}},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":function(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 }}"}}}}}})};function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var h=function(e){var t,n,r=e.loadMore;var o=(t=(0,a.useState)(null),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(i)throw r}}return l}}(t,2)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return v(e,t)}}(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=o[0],i=o[1],c=(0,a.useRef)(null),u=(0,a.useCallback)(function(e){if(!!e)c.current&&c.current.disconnect(),c.current=new IntersectionObserver(function(t){t.forEach(function(t){if(t.target===e.current)t.isIntersecting&&(c.current&&c.current.unobserve(e.current),r())})}),e.current&&c.current&&c.current.observe(e.current)},[r]);return(0,a.useEffect)(function(){return u(l),function(){c.current&&c.current.disconnect()}},[l,u]),{lastItem:l,setLastItem:i}};function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function w(e,t,n,r,o,l,a){try{var i=e[l](a),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,o)}function E(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var l=e.apply(t,n);function a(e){w(l,r,o,a,i,"next",e)}function i(e){w(l,r,o,a,i,"throw",e)}a(void 0)})}}function O(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(i)throw r}}return l}}(e,t)||x(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||x(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return g(e,t)}}function S(e,t){var n,r,o,l,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return l={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function i(l){return function(i){return function(l){if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,i])}}}var j=function(){var e=(0,u.g)().t,t=(0,o.useResourceActionContext)(),n=t.data,r=t.mutate,c=O((0,a.useState)(!1),2),s=c[0],f=c[1],p=O((0,a.useState)(null),2),d=p[0],y=p[1],v=(0,a.useContext)(m.T),g=v.role,w=v.setRole,x=O((0,a.useState)([]),2),P=x[0],C=x[1],I=O((0,a.useState)(!1),2),R=I[0],k=I[1],D=(0,o.useAPIClient)(),T=h({loadMore:(0,a.useCallback)(E(function(){var e,t;return S(this,function(o){switch(o.label){case 0:if(!(e=null==n?void 0:n.meta)||e.page>=e.totalPage)return[2];return k(!0),[4,D.resource("roles").list({page:e.page+1,pageSize:e.pageSize,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]})];case 1:return r((null==(t=o.sent())?void 0:t.data)||{}),k(!1),[2]}})}),[n])}),M=T.lastItem,F=T.setLastItem;(0,a.useEffect)(function(){if(!!P[0])w(P[0])},[P,w]),(0,a.useEffect)(function(){var e,t;if(!!(null==n?void 0:null===(e=n.data)||void 0===e?void 0:e.length))F(i().createRef()),(null===(t=n.meta)||void 0===t?void 0:t.page)>1?C(function(e){return e.concat(n.data)}):C(n.data)},[n,F]);var U=(0,a.useMemo)(function(){return P.map(function(e,t){return{key:e.name,label:t===P.length-1?i().createElement("div",{ref:M},i().createElement(j.Item,{item:e,onEdit:function(){f(!0),y(e)}})):i().createElement(j.Item,{item:e,onEdit:function(){f(!0),y(e)}})}})},[P,M]);return i().createElement(i().Fragment,null,P.length?i().createElement(l.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:A(U).concat(A(R?[{key:"loading",label:i().createElement(l.Spin,null)}]:[])),selectedKeys:[null==g?void 0:g.name],onSelect:function(e){var t=e.key;w(P.find(function(e){return e.name===t}))}}):i().createElement(l.Empty,{image:l.Empty.PRESENTED_IMAGE_SIMPLE}),i().createElement(o.ActionContextProvider,{value:{visible:s,setVisible:f}},i().createElement(o.RecordProvider,{record:d,collectionName:"departments"},i().createElement(o.SchemaComponent,{scope:{t:e},schema:b}))))};j.Item=function(e){var t=e.item,n=e.onEdit,a=(0,u.g)().t,c=(0,o.useResourceActionContext)().refreshAsync,s=l.App.useApp(),f=s.modal,m=s.message,d=(0,o.useAPIClient)(),y=function(){f.confirm({title:a("Delete"),content:a("Are you sure you want to delete it?"),onOk:E(function(){return S(this,function(e){switch(e.label){case 0:return[4,d.resource("roles").destroy({filterByTk:t.name})];case 1:return e.sent(),m.success(a("Deleted successfully")),[4,c()];case 2:return e.sent(),[2]}})})})},b=r.Schema.compile(t.title,{t:a});return i().createElement(l.Row,null,i().createElement(l.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"}},i().createElement("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"}},i().createElement(p.TagOutlined,null),i().createElement("span",{style:{marginLeft:"10px"},title:b},b))),i().createElement(l.Col,null,t.default?i().createElement(l.Tag,{color:"success",bordered:!1},a("Default")):null,i().createElement(l.Dropdown,{menu:{items:[{label:a("Edit"),key:"edit"},{label:a("Delete"),key:"delete"}],onClick:function(e){var t=e.key;switch(e.domEvent.stopPropagation(),t){case"edit":n();break;case"delete":y()}}}},i().createElement(p.MoreOutlined,null))))};var P=n("844");function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var I=function(e){return i().createElement("div",{style:{maxHeight:"60vh",overflowY:"auto"}},e.children)},R=function(e){var t,n,r=e.active,s=(0,u.g)().t;var f=(t=i().useState("general"),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(i)throw r}}return l}}(t,2)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return C(e,t)}}(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=f[0],d=f[1],y=(0,a.useContext)(m.T),b=y.role,v=y.setRole,h=(0,o.usePlugin)(c.default),g=(0,o.useACLRoleContext)(),w=(0,a.useMemo)(function(){return h.settingsUI.getPermissionsTabs({t:s,activeKey:p,TabLayout:I,activeRole:b,currentUserRole:g}).filter(Boolean)},[p,h.settingsUI,b,s,g]),E=(0,o.useAPIClient)(),O=(0,o.useRequest)(function(){return E.resource("roles").get({filterByTk:null==b?void 0:b.name}).then(function(e){var t,n,r=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.data;return null===(n=r.snippets)||void 0===n||n.forEach(function(e){r[e]=!0}),r})},{ready:r&&!!b,refreshDeps:[null==b?void 0:b.name]}).data;return(0,a.useEffect)(function(){d("general")},[null==b?void 0:b.name]),(0,a.useEffect)(function(){v(O)},[O,v]),i().createElement(P.U,null,i().createElement(l.Tabs,{type:"card",activeKey:p,onChange:function(e){return d(e)},items:w}))},k=n("749");function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var T=function(){var e,t,n=(0,u.g)().t,r=(0,o.useAPIClient)(),c=(0,o.useCurrentRoleMode)();var s=(e=(0,a.useState)(c||"default"),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(i)throw r}}return l}}(e,2)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return D(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),f=s[0],m=s[1],p=(0,k.useRequest)(function(e){return r.resource("roles").setSystemRoleMode({values:{roleMode:e}})},{manual:!0,onSuccess:function(e,t){m(t[0]),l.message.success(n("Saved successfully")),window.location.reload()}}).run;return i().createElement("div",null,i().createElement(l.Select,{value:f,onChange:function(e){return p(e)},options:[{value:"default",label:n("Independent roles"),desc:n("Do not use role union. Users need to switch between their roles individually.")},{value:"allow-use-union",label:n("Allow roles union"),desc:n("Allow users to use role union, which means they can use permissions from all their roles simultaneously, or switch between individual roles.")},{value:"only-use-union",label:n("Roles union only"),desc:n("Force users to use only role union. They cannot switch between individual roles.")}],optionRender:function(e){return i().createElement(l.Tooltip,{placement:"right",title:i().createElement("div",null,e.data.desc)},i().createElement(l.Flex,{justify:"space-between"},i().createElement("span",{style:{display:"inline-flex",paddingRight:8}},e.data.label)))}}))};function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var l=[],a=!0,i=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(l.push(n.value),!t||l.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(i)throw r}}return l}}(e,t)||U(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e,t){if(e){if("string"==typeof e)return M(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return M(e,t)}}var _={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"}}]},q=function(){var e,t=(0,u.g)().t,n=(0,o.usePlugin)(c.default),s=F(i().useState("permissions"),2),p=s[0],d=s[1],y=Array.from(n.rolesManager.list()).map(function(e){var n=F(e,2),o=n[0],l=n[1];return{key:o,label:r.Schema.compile(l.title,{t:t}),children:l.Component?i().createElement(l.Component,{active:p===o}):null}}),b=F((0,a.useState)(null),2),v=b[0],h=b[1],g=(0,o.useSchemaComponentContext)(),w=(0,a.useMemo)(function(){var e,t;return e=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,l;r=e,o=t,l=n[t],o in r?Object.defineProperty(r,o,{value:l,enumerable:!0,configurable:!0,writable:!0}):r[o]=l})}return e}({},g),t=(t={designable:!1},t),Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e},[g]);return i().createElement(o.SchemaComponentContext.Provider,{value:w},i().createElement(m.T.Provider,{value:{role:v,setRole:h}},i().createElement(l.Card,null,i().createElement(l.Row,{gutter:24,style:{flexWrap:"nowrap"}},i().createElement(l.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"350px"}},i().createElement(o.ResourceActionProvider,{collection:_,request:{resource:"roles",action:"list",params:{filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}}},i().createElement(o.CollectionProvider_deprecated,{collection:_},i().createElement(l.Row,{justify:"space-between",align:"middle",style:{width:"100%"}},i().createElement(f,null),i().createElement(T,null)),i().createElement(l.Divider,{style:{margin:"12px 0"}}),i().createElement(j,null)))),i().createElement(l.Col,{flex:"auto",style:{overflow:"hidden"}},i().createElement(l.Tabs,{activeKey:p,onChange:function(e){return d(e)},items:[{key:"permissions",label:t("Permissions"),children:i().createElement(R,{active:"permissions"===p})}].concat(function(e){if(Array.isArray(e))return M(e)}(e=y)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||U(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}))))))}},844:function(e,t,n){n.d(t,{U:function(){return c},r:function(){return u}});var r=n(772),o=n(721),l=n(156),a=n.n(l),i=(0,l.createContext)([]);i.displayName="AvailableActionsContext";var c=function(e){var t=(0,r.useRequest)({resource:"availableActions",action:"list"}),n=t.data;return t.loading?a().createElement(o.Spin,null):a().createElement(i.Provider,{value:null==n?void 0:n.data},e.children)},u=function(){return(0,l.useContext)(i)}},888:function(e,t,n){n.d(t,{g:function(){return o}});var r=n(238);function o(){return(0,r.useTranslation)(["@nocobase/plugin-acl","client"],{nsMode:"fallback"})}}}]);
|
|
@@ -0,0 +1,10 @@
|
|
|
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 React from 'react';
|
|
10
|
+
export declare const RoleModeSelect: () => React.JSX.Element;
|
package/dist/client/index.js
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("@nocobase/client"),require("lodash"),require("ahooks"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("antd-style"),require("react")):"function"==typeof define&&define.amd?define("@nocobase/plugin-acl",["react-i18next","@formily/shared","@nocobase/utils/client","@formily/core","@nocobase/client","lodash","ahooks","antd","@ant-design/icons","@formily/react","antd-style","react"],t):"object"==typeof exports?exports["@nocobase/plugin-acl"]=t(require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("@nocobase/client"),require("lodash"),require("ahooks"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("antd-style"),require("react")):e["@nocobase/plugin-acl"]=t(e["react-i18next"],e["@formily/shared"],e["@nocobase/utils/client"],e["@formily/core"],e["@nocobase/client"],e.lodash,e.ahooks,e.antd,e["@ant-design/icons"],e["@formily/react"],e["antd-style"],e.react)}(self,function(e,t,n,r,o,i,u,a,c,l,s,f){return function(){var p,d,b,h,y,m,v={746:function(e,t,n){"use strict";n.d(t,{T:function(){return r}});var r=(0,n(156).createContext)({role:null});r.displayName="RolesManagerContext"},509:function(e,t,n){"use strict";n.r(t),n.d(t,{DesktopAllRoutesProvider:function(){return E},MenuPermissions:function(){return C}});var r=n(563),o=n(875),i=n(772),u=n(749),a=n(721),c=n(467),l=n(156),s=n.n(l),f=n(238),p=n(746);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function b(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}function h(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){b(i,r,o,u,a,"next",e)}function a(e){b(i,r,o,u,a,"throw",e)}u(void 0)})}}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,i;r=e,o=t,i=n[t],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i})}return e}function m(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function v(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}}function w(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}function x(){var e,t,n=(e=["\n .ant-table-cell {\n > .ant-space-horizontal {\n .ant-space-item-split:has(+ .ant-space-item:empty) {\n display: none;\n }\n }\n }\n"],!t&&(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return x=function(){return n},n}var k=function(e,t){return Array.isArray(e)?e.map(function(e){var n,r=k(e.children,e),o=0===r.length;return{title:e.title,id:e.id,children:o?null:r,hideChildren:o,firstTabId:null===(n=r[0])||void 0===n?void 0:n.id,parent:t}}):[]},O=function(e){if(!Array.isArray(e))return[];var t=[],n=!0,r=!1,o=void 0;try{for(var i,u=e[Symbol.iterator]();!(n=(i=u.next()).done);n=!0){var a=i.value;t.push(a.id),t.push.apply(t,v(O(a.children)))}}catch(e){r=!0,o=e}finally{try{!n&&null!=u.return&&u.return()}finally{if(r)throw o}}return t},P=(0,i.css)(x()),j=function(e,t,n){return e.map(function(e){var r,o=((null===(r=e.title)||void 0===r?void 0:r.match(/^\s*\{\{\s*.+?\s*\}\}\s*$/))?n(e.title):t(e.title))||t("Unnamed");return e.children?m(y({},e),{title:o,children:j(e.children,t,n)}):m(y({},e),{title:o})})},S=(0,l.createContext)({routeList:[]}),_=function(e){var t=e.children,n=e.refreshRef,r=(0,i.useAPIClient)(),o=(0,l.useMemo)(function(){return r.resource("desktopRoutes")},[r]),u=(0,i.useRequest)(function(){return o.list({tree:!0,sort:"sort",paginate:!1,filter:{hidden:{$ne:!0}}}).then(function(e){return e.data})},{manual:!0}),a=u.data,c=u.runAsync;n&&(n.current=c);var f=(0,l.useMemo)(function(){return(null==a?void 0:a.data)||[]},[a]),p=(0,l.useMemo)(function(){return{routeList:f}},[f]);return s().createElement(S.Provider,{value:p},t)},E=function(e){var t=e.children,n=e.active,r=s().useRef(function(){});return(0,l.useEffect)(function(){if(n){var e;null===(e=r.current)||void 0===e||e.call(r)}},[n]),s().createElement(_,{refreshRef:r},t)},C=function(e){var t,n,d,b,m,x=e.active,_=k((0,l.useContext)(S).routeList),E=(0,l.useContext)(p.T),C=E.role,T=E.setRole,R=(0,i.useAPIClient)(),q=(0,f.useTranslation)().t,A=O(_);var M=(t=(0,l.useState)([]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);u=!0);}catch(e){a=!0,r=e}finally{try{!u&&null!=o.return&&o.return()}finally{if(a)throw r}}return i}}(t,2)||g(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),I=M[0],D=M[1],F=(0,i.useRequest)({resource:"roles.desktopRoutes",resourceOf:C.name,action:"list",params:{paginate:!1,filter:{hidden:{$ne:!0}}}},{ready:!!C&&x,refreshDeps:[null==C?void 0:C.name],onSuccess:function(e){var t;D((null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.map(function(e){return e.id}))||[])}}),z=F.loading,L=F.refresh,N=R.resource("roles.desktopRoutes",C.name),G=A.length===I.length,U=(0,i.useAllAccessDesktopRoutes)().refresh;var B=(d=h(function(e,t){var n,r,o,i,u,l,s,f;return w(this,function(p){switch(p.label){case 0:if(!e)return[3,2];return n=I.filter(function(e){return e!==t.id}),r=[t.id],t.parent&&0===t.parent.children.filter(function(e){return n.includes(e.id)}).length&&(n=n.filter(function(e){return e!==t.parent.id}),r.push(t.parent.id)),t.children&&(n=n.filter(function(e){return!O(t.children).includes(e)}),(o=r).push.apply(o,v(O(t.children)))),D(n),[4,N.remove({values:r})];case 1:return p.sent(),[3,4];case 2:return i=v(I).concat([t.id]),u=[t.id],t.parent&&!i.includes(t.parent.id)&&(i.push(t.parent.id),u.push(t.parent.id)),t.children&&(f=O(t.children),(l=i).push.apply(l,v(f)),(s=u).push.apply(s,v(f))),D((0,c.uniq)(i)),[4,N.add({values:u})];case 3:p.sent(),p.label=4;case 4:return U(),a.message.success(q("Saved successfully")),[2]}})}),function(e,t){return d.apply(this,arguments)});var $=(0,u.useMemoizedFn)((b=h(function(e){return w(this,function(t){switch(t.label){case 0:return[4,R.resource("roles").update({filterByTk:C.name,values:e.values})];case 1:return t.sent(),T(y({},C,e.values)),a.message.success(q("Saved successfully")),[2]}})}),function(e){return b.apply(this,arguments)})),K=(0,l.useMemo)(function(){return(0,r.createForm)({values:C,effects:function(){var e;(0,r.onFormValuesChange)((e=h(function(e){return w(this,function(t){switch(t.label){case 0:return[4,$(e)];case 1:return t.sent(),[2]}})}),function(t){return e.apply(this,arguments)}))}})},[C,$]),V=(0,i.useCompile)();return s().createElement(s().Fragment,null,s().createElement(i.SchemaComponent,{schema:{type:"void",name:(0,o.uid)(),"x-component":"FormV2","x-component-props":{form:K},properties:{allowNewMenu:{title:q("Route permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":q("New routes are allowed to be accessed by default")}}}}),s().createElement(a.Table,{className:P,loading:z,rowKey:"id",pagination:!1,expandable:{defaultExpandAllRows:!1},columns:[{dataIndex:"title",title:q("Route name")},{dataIndex:"accessible",title:s().createElement(s().Fragment,null,s().createElement(a.Checkbox,{checked:G,onChange:(m=h(function(e){return w(this,function(e){switch(e.label){case 0:if(!G)return[3,2];return[4,N.set({values:[]})];case 1:return e.sent(),[3,4];case 2:return[4,N.set({values:A})];case 3:e.sent(),e.label=4;case 4:return L(),U(),a.message.success(q("Saved successfully")),[2]}})}),function(e){return m.apply(this,arguments)})})," ",q("Accessible")),render:function(e,t){var n=I.includes(t.id);return s().createElement(a.Checkbox,{checked:n,onChange:function(){return B(n,t)}})}}],dataSource:j(_,q,V)}))}},371:function(e,t,n){"use strict";n.r(t),n.d(t,{PluginACLClient:function(){return C},default:function(){return T},RolesManagerContext:function(){return v.T}});var r=n("772"),o=n("156"),i=n.n(o),u=n("509"),a=n(581);function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var l=(0,r.lazy)(function(){return a("imported_-1r1jup3_component",n.e("837").then(n.bind(n,784)))},"GeneralPermissions").GeneralPermissions,s=(0,r.lazy)(function(){return a("imported_1qalbop_component",Promise.resolve().then(n.bind(n,509)))},"MenuPermissions").MenuPermissions,f=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="permissionsTabs",n=[function(e){var t=e.t,n=e.TabLayout;return{key:"general",label:t("System"),sort:10,children:i().createElement(n,null,i().createElement(l,null))}},function(e){var t=e.activeKey,n=e.t,r=e.TabLayout;return{key:"menu",label:n("Desktop routes"),sort:20,children:i().createElement(r,null,i().createElement(u.DesktopAllRoutesProvider,{active:"menu"===t},i().createElement(s,{active:"menu"===t})))}}],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"addPermissionsTab",value:function(e){this.permissionsTabs.push(e)}},{key:"getPermissionsTabs",value:function(e){return this.permissionsTabs.map(function(t){return"function"==typeof t?t(e):t}).sort(function(e,t){var n,r;return(null!==(n=null==e?void 0:e.sort)&&void 0!==n?n:100)-(null!==(r=null==t?void 0:t.sort)&&void 0!==r?r:100)})}}],c(e.prototype,t),r}(),p=n("584");function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var b=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="rolesManager",n=new p.Registry,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"add",value:function(e,t){this.rolesManager.register(e,t)}},{key:"list",value:function(){return this.rolesManager.getEntities()}}],d(e.prototype,t),r}(),h=n("238");function y(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}var m=function(){var e,t,n=(0,h.useTranslation)().t,o=(0,r.useAPIClient)(),u=(0,r.useCurrentRoles)();if(u.length<=1)return null;return i().createElement(r.SchemaSettingsItem,{eventKey:"SwitchRole",title:"SwitchRole"},i().createElement(r.SelectWithTitle,{title:n("Switch role"),fieldNames:{label:"title",value:"name"},options:u,defaultValue:o.auth.role,onChange:(t=(e=function(e){return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}(this,function(t){switch(t.label){case 0:return o.auth.setRole(e),[4,o.resource("users").setDefaultRole({values:{roleName:e}})];case 1:return t.sent(),location.reload(),window.location.reload(),[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){y(i,r,o,u,a,"next",e)}function a(e){y(i,r,o,u,a,"throw",e)}u(void 0)})}),function(e){return t.apply(this,arguments)})}))},v=n("746"),g=n(581);function w(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}function x(e,t,n){return(x=_()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&j(o,n.prototype),o}).apply(null,arguments)}function k(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function j(e,t){return(j=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function S(e){var t="function"==typeof Map?new Map:void 0;return(S=function(e){var n;if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return x(e,arguments,P(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),j(r,e)})(e)}function _(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_=function(){return!!e})()}var E=(0,r.lazy)(function(){return g("imported_-1obaqk_component",n.e("733").then(n.bind(n,594)))},"RolesManagement").RolesManagement,C=function(e){var t,n,r;function o(){var e,t,n,r;return!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,o),t=this,n=o,r=arguments,n=P(n),O(e=function(e,t){return t&&("object"===function(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}(t)||"function"==typeof t)?t:function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(t,_()?Reflect.construct(n,r||[],P(t).constructor):n.apply(t,r)),"rolesManager",new b),O(e,"settingsUI",new f),e}return!function(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&j(e,t)}(o,e),t=o,n=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}(this,function(e){return t.pluginSettingsManager.add("users-permissions.roles",{title:t.t("Roles & Permissions"),icon:"LockOutlined",Component:E,aclSnippet:"pm.acl.roles",sort:3}),t.app.addUserCenterSettingsItem({name:"divider_switchRole",type:"divider",sort:200}),t.app.addUserCenterSettingsItem({name:"switchRole",Component:m,sort:300}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){w(i,r,o,u,a,"next",e)}function a(e){w(i,r,o,u,a,"throw",e)}u(void 0)})})()}}],k(t.prototype,n),o}(S(r.Plugin)),T=C},581:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=c},563:function(e){"use strict";e.exports=r},505:function(e){"use strict";e.exports=l},875:function(e){"use strict";e.exports=t},772:function(e){"use strict";e.exports=o},584:function(e){"use strict";e.exports=n},749:function(e){"use strict";e.exports=u},721:function(e){"use strict";e.exports=a},202:function(e){"use strict";e.exports=s},467:function(e){"use strict";e.exports=i},156:function(e){"use strict";e.exports=f},238:function(t){"use strict";t.exports=e}},g={};function w(e){var t=g[e];if(void 0!==t)return t.exports;var n=g[e]={exports:{}};return v[e](n,n.exports,w),n.exports}return w.m=v,w.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return w.d(t,{a:t}),t},w.d=function(e,t){for(var n in t)w.o(t,n)&&!w.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},w.f={},w.e=function(e){return Promise.all(Object.keys(w.f).reduce(function(t,n){return w.f[n](e,t),t},[]))},w.u=function(e){return""+({733:"e38fd71a1d7e556e",837:"de199341733ccf37"})[e]+".js"},w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p={},d="@nocobase/plugin-acl:",w.l=function(e,t,n,r){if(p[e]){p[e].push(t);return}if(void 0!==n){for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var c=u[a];if(c.getAttribute("src")==e||c.getAttribute("data-webpack")==d+n){o=c;break}}}!o&&(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,w.nc&&o.setAttribute("nonce",w.nc),o.setAttribute("data-webpack",d+n),o.src=e),p[e]=[t];var l=function(t,n){o.onerror=o.onload=null,clearTimeout(s);var r=p[e];if(delete p[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},w.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},w.p=(!(b=window.__nocobase_public_path__||"/").endsWith("/")&&(b+="/"),b+"static/plugins/@nocobase/plugin-acl/dist/client/"),h={909:0},w.f.j=function(e,t){var n=w.o(h,e)?h[e]:void 0;if(0!==n){if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=h[e]=[t,r]});t.push(n[2]=r);var o=w.p+w.u(e),i=Error();w.l(o,function(t){if(w.o(h,e)&&(0!==(n=h[e])&&(h[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}}},y=function(e,t){var n=t[0],r=t[1],o=t[2],i,u,a=0;if(n.some(function(e){return 0!==h[e]})){for(i in r)w.o(r,i)&&(w.m[i]=r[i]);o&&o(w)}for(e&&e(t);a<n.length;a++)u=n[a],w.o(h,u)&&h[u]&&h[u][0](),h[u]=0},(m=self.webpackChunk_nocobase_plugin_acl=self.webpackChunk_nocobase_plugin_acl||[]).forEach(y.bind(null,0)),m.push=y.bind(null,m.push.bind(m)),w("371")}()});
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("@nocobase/client"),require("lodash"),require("ahooks"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("antd-style"),require("react")):"function"==typeof define&&define.amd?define("@nocobase/plugin-acl",["react-i18next","@formily/shared","@nocobase/utils/client","@formily/core","@nocobase/client","lodash","ahooks","antd","@ant-design/icons","@formily/react","antd-style","react"],t):"object"==typeof exports?exports["@nocobase/plugin-acl"]=t(require("react-i18next"),require("@formily/shared"),require("@nocobase/utils/client"),require("@formily/core"),require("@nocobase/client"),require("lodash"),require("ahooks"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("antd-style"),require("react")):e["@nocobase/plugin-acl"]=t(e["react-i18next"],e["@formily/shared"],e["@nocobase/utils/client"],e["@formily/core"],e["@nocobase/client"],e.lodash,e.ahooks,e.antd,e["@ant-design/icons"],e["@formily/react"],e["antd-style"],e.react)}(self,function(e,t,n,r,o,i,u,a,c,l,s,f){return function(){var p,d,b,h,y,m,v={746:function(e,t,n){"use strict";n.d(t,{T:function(){return r}});var r=(0,n(156).createContext)({role:null});r.displayName="RolesManagerContext"},509:function(e,t,n){"use strict";n.r(t),n.d(t,{DesktopAllRoutesProvider:function(){return E},MenuPermissions:function(){return C}});var r=n(563),o=n(875),i=n(772),u=n(749),a=n(721),c=n(467),l=n(156),s=n.n(l),f=n(238),p=n(746);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function b(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}function h(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){b(i,r,o,u,a,"next",e)}function a(e){b(i,r,o,u,a,"throw",e)}u(void 0)})}}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,i;r=e,o=t,i=n[t],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i})}return e}function m(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function v(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}}function w(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}function x(){var e,t,n=(e=["\n .ant-table-cell {\n > .ant-space-horizontal {\n .ant-space-item-split:has(+ .ant-space-item:empty) {\n display: none;\n }\n }\n }\n"],!t&&(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return x=function(){return n},n}var k=function(e,t){return Array.isArray(e)?e.map(function(e){var n,r=k(e.children,e),o=0===r.length;return{title:e.title,id:e.id,children:o?null:r,hideChildren:o,firstTabId:null===(n=r[0])||void 0===n?void 0:n.id,parent:t}}):[]},O=function(e){if(!Array.isArray(e))return[];var t=[],n=!0,r=!1,o=void 0;try{for(var i,u=e[Symbol.iterator]();!(n=(i=u.next()).done);n=!0){var a=i.value;t.push(a.id),t.push.apply(t,v(O(a.children)))}}catch(e){r=!0,o=e}finally{try{!n&&null!=u.return&&u.return()}finally{if(r)throw o}}return t},P=(0,i.css)(x()),j=function(e,t,n){return e.map(function(e){var r,o=((null===(r=e.title)||void 0===r?void 0:r.match(/^\s*\{\{\s*.+?\s*\}\}\s*$/))?n(e.title):t(e.title))||t("Unnamed");return e.children?m(y({},e),{title:o,children:j(e.children,t,n)}):m(y({},e),{title:o})})},S=(0,l.createContext)({routeList:[]}),_=function(e){var t=e.children,n=e.refreshRef,r=(0,i.useAPIClient)(),o=(0,l.useMemo)(function(){return r.resource("desktopRoutes")},[r]),u=(0,i.useRequest)(function(){return o.list({tree:!0,sort:"sort",paginate:!1,filter:{hidden:{$ne:!0}}}).then(function(e){return e.data})},{manual:!0}),a=u.data,c=u.runAsync;n&&(n.current=c);var f=(0,l.useMemo)(function(){return(null==a?void 0:a.data)||[]},[a]),p=(0,l.useMemo)(function(){return{routeList:f}},[f]);return s().createElement(S.Provider,{value:p},t)},E=function(e){var t=e.children,n=e.active,r=s().useRef(function(){});return(0,l.useEffect)(function(){if(n){var e;null===(e=r.current)||void 0===e||e.call(r)}},[n]),s().createElement(_,{refreshRef:r},t)},C=function(e){var t,n,d,b,m,x=e.active,_=k((0,l.useContext)(S).routeList),E=(0,l.useContext)(p.T),C=E.role,R=E.setRole,T=(0,i.useAPIClient)(),q=(0,f.useTranslation)().t,A=O(_);var M=(t=(0,l.useState)([]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],u=!0,a=!1;try{for(o=o.call(e);!(u=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);u=!0);}catch(e){a=!0,r=e}finally{try{!u&&null!=o.return&&o.return()}finally{if(a)throw r}}return i}}(t,2)||g(t,n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),I=M[0],D=M[1],F=(0,i.useRequest)({resource:"roles.desktopRoutes",resourceOf:C.name,action:"list",params:{paginate:!1,filter:{hidden:{$ne:!0}}}},{ready:!!C&&x,refreshDeps:[null==C?void 0:C.name],onSuccess:function(e){var t;D((null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.map(function(e){return e.id}))||[])}}),z=F.loading,L=F.refresh,N=T.resource("roles.desktopRoutes",C.name),G=A.length===I.length,U=(0,i.useAllAccessDesktopRoutes)().refresh;var B=(d=h(function(e,t){var n,r,o,i,u,l,s,f;return w(this,function(p){switch(p.label){case 0:if(!e)return[3,2];return n=I.filter(function(e){return e!==t.id}),r=[t.id],t.parent&&0===t.parent.children.filter(function(e){return n.includes(e.id)}).length&&(n=n.filter(function(e){return e!==t.parent.id}),r.push(t.parent.id)),t.children&&(n=n.filter(function(e){return!O(t.children).includes(e)}),(o=r).push.apply(o,v(O(t.children)))),D(n),[4,N.remove({values:r})];case 1:return p.sent(),[3,4];case 2:return i=v(I).concat([t.id]),u=[t.id],t.parent&&!i.includes(t.parent.id)&&(i.push(t.parent.id),u.push(t.parent.id)),t.children&&(f=O(t.children),(l=i).push.apply(l,v(f)),(s=u).push.apply(s,v(f))),D((0,c.uniq)(i)),[4,N.add({values:u})];case 3:p.sent(),p.label=4;case 4:return U(),a.message.success(q("Saved successfully")),[2]}})}),function(e,t){return d.apply(this,arguments)});var $=(0,u.useMemoizedFn)((b=h(function(e){return w(this,function(t){switch(t.label){case 0:return[4,T.resource("roles").update({filterByTk:C.name,values:e.values})];case 1:return t.sent(),R(y({},C,e.values)),a.message.success(q("Saved successfully")),[2]}})}),function(e){return b.apply(this,arguments)})),K=(0,l.useMemo)(function(){return(0,r.createForm)({values:C,effects:function(){var e;(0,r.onFormValuesChange)((e=h(function(e){return w(this,function(t){switch(t.label){case 0:return[4,$(e)];case 1:return t.sent(),[2]}})}),function(t){return e.apply(this,arguments)}))}})},[C,$]),V=(0,i.useCompile)();return s().createElement(s().Fragment,null,s().createElement(i.SchemaComponent,{schema:{type:"void",name:(0,o.uid)(),"x-component":"FormV2","x-component-props":{form:K},properties:{allowNewMenu:{title:q("Route permissions"),"x-decorator":"FormItem","x-component":"Checkbox","x-content":q("New routes are allowed to be accessed by default")}}}}),s().createElement(a.Table,{className:P,loading:z,rowKey:"id",pagination:!1,expandable:{defaultExpandAllRows:!1},columns:[{dataIndex:"title",title:q("Route name")},{dataIndex:"accessible",title:s().createElement(s().Fragment,null,s().createElement(a.Checkbox,{checked:G,onChange:(m=h(function(e){return w(this,function(e){switch(e.label){case 0:if(!G)return[3,2];return[4,N.set({values:[]})];case 1:return e.sent(),[3,4];case 2:return[4,N.set({values:A})];case 3:e.sent(),e.label=4;case 4:return L(),U(),a.message.success(q("Saved successfully")),[2]}})}),function(e){return m.apply(this,arguments)})})," ",q("Accessible")),render:function(e,t){var n=I.includes(t.id);return s().createElement(a.Checkbox,{checked:n,onChange:function(){return B(n,t)}})}}],dataSource:j(_,q,V)}))}},371:function(e,t,n){"use strict";n.r(t),n.d(t,{PluginACLClient:function(){return C},default:function(){return R},RolesManagerContext:function(){return v.T}});var r=n("772"),o=n("156"),i=n.n(o),u=n("509"),a=n(581);function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var l=(0,r.lazy)(function(){return a("imported_-1r1jup3_component",n.e("837").then(n.bind(n,784)))},"GeneralPermissions").GeneralPermissions,s=(0,r.lazy)(function(){return a("imported_1qalbop_component",Promise.resolve().then(n.bind(n,509)))},"MenuPermissions").MenuPermissions,f=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="permissionsTabs",n=[function(e){var t=e.t,n=e.TabLayout;return{key:"general",label:t("System"),sort:10,children:i().createElement(n,null,i().createElement(l,null))}},function(e){var t=e.activeKey,n=e.t,r=e.TabLayout;return{key:"menu",label:n("Desktop routes"),sort:20,children:i().createElement(r,null,i().createElement(u.DesktopAllRoutesProvider,{active:"menu"===t},i().createElement(s,{active:"menu"===t})))}}],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"addPermissionsTab",value:function(e){this.permissionsTabs.push(e)}},{key:"getPermissionsTabs",value:function(e){return this.permissionsTabs.map(function(t){return"function"==typeof t?t(e):t}).sort(function(e,t){var n,r;return(null!==(n=null==e?void 0:e.sort)&&void 0!==n?n:100)-(null!==(r=null==t?void 0:t.sort)&&void 0!==r?r:100)})}}],c(e.prototype,t),r}(),p=n("584");function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var b=function(){var e,t,n;function r(){var e,t,n;!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,r),e=this,t="rolesManager",n=new p.Registry,t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}return e=r,t=[{key:"add",value:function(e,t){this.rolesManager.register(e,t)}},{key:"list",value:function(){return this.rolesManager.getEntities()}}],d(e.prototype,t),r}(),h=n("238");function y(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}var m=function(){var e,t,n,o=(0,h.useTranslation)().t,u=(0,r.useAPIClient)(),a=(0,r.useCurrentRoles)(),c=(0,r.useCurrentRoleMode)(),l=null===(n=a.find(function(e){return e.name===u.auth.role}))||void 0===n?void 0:n.name;if(a.length<=1||"only-use-union"===c)return null;return i().createElement(r.SchemaSettingsItem,{eventKey:"SwitchRole",title:"SwitchRole"},i().createElement(r.SelectWithTitle,{title:o("Switch role"),fieldNames:{label:"title",value:"name"},options:a,defaultValue:l||a[0].name,onChange:(t=(e=function(e){return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}(this,function(t){switch(t.label){case 0:return u.auth.setRole(e),[4,u.resource("users").setDefaultRole({values:{roleName:e}})];case 1:return t.sent(),location.reload(),window.location.reload(),[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){y(i,r,o,u,a,"next",e)}function a(e){y(i,r,o,u,a,"throw",e)}u(void 0)})}),function(e){return t.apply(this,arguments)})}))},v=n("746"),g=n(581);function w(e,t,n,r,o,i,u){try{var a=e[i](u),c=a.value}catch(e){n(e);return}a.done?t(c):Promise.resolve(c).then(r,o)}function x(e,t,n){return(x=_()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&j(o,n.prototype),o}).apply(null,arguments)}function k(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function O(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function P(e){return(P=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function j(e,t){return(j=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function S(e){var t="function"==typeof Map?new Map:void 0;return(S=function(e){var n;if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return x(e,arguments,P(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),j(r,e)})(e)}function _(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(_=function(){return!!e})()}var E=(0,r.lazy)(function(){return g("imported_-1obaqk_component",n.e("787").then(n.bind(n,761)))},"RolesManagement").RolesManagement,C=function(e){var t,n,r;function o(){var e,t,n,r;return!function(e,t){if(!(e instanceof t))throw TypeError("Cannot call a class as a function")}(this,o),t=this,n=o,r=arguments,n=P(n),O(e=function(e,t){return t&&("object"===function(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}(t)||"function"==typeof t)?t:function(e){if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(t,_()?Reflect.construct(n,r||[],P(t).constructor):n.apply(t,r)),"rolesManager",new b),O(e,"settingsUI",new f),e}return!function(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&j(e,t)}(o,e),t=o,n=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=t.call(e,u)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}(this,function(e){return t.pluginSettingsManager.add("users-permissions.roles",{title:t.t("Roles & Permissions"),icon:"LockOutlined",Component:E,aclSnippet:"pm.acl.roles",sort:3}),t.app.addUserCenterSettingsItem({name:"divider_switchRole",type:"divider",sort:200}),t.app.addUserCenterSettingsItem({name:"switchRole",Component:m,sort:300}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){w(i,r,o,u,a,"next",e)}function a(e){w(i,r,o,u,a,"throw",e)}u(void 0)})})()}}],k(t.prototype,n),o}(S(r.Plugin)),R=C},581:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=c},563:function(e){"use strict";e.exports=r},505:function(e){"use strict";e.exports=l},875:function(e){"use strict";e.exports=t},772:function(e){"use strict";e.exports=o},584:function(e){"use strict";e.exports=n},749:function(e){"use strict";e.exports=u},721:function(e){"use strict";e.exports=a},202:function(e){"use strict";e.exports=s},467:function(e){"use strict";e.exports=i},156:function(e){"use strict";e.exports=f},238:function(t){"use strict";t.exports=e}},g={};function w(e){var t=g[e];if(void 0!==t)return t.exports;var n=g[e]={exports:{}};return v[e](n,n.exports,w),n.exports}return w.m=v,w.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return w.d(t,{a:t}),t},w.d=function(e,t){for(var n in t)w.o(t,n)&&!w.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},w.f={},w.e=function(e){return Promise.all(Object.keys(w.f).reduce(function(t,n){return w.f[n](e,t),t},[]))},w.u=function(e){return""+({787:"521fd10515e7f9e6",837:"de199341733ccf37"})[e]+".js"},w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),w.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},p={},d="@nocobase/plugin-acl:",w.l=function(e,t,n,r){if(p[e]){p[e].push(t);return}if(void 0!==n){for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var c=u[a];if(c.getAttribute("src")==e||c.getAttribute("data-webpack")==d+n){o=c;break}}}!o&&(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,w.nc&&o.setAttribute("nonce",w.nc),o.setAttribute("data-webpack",d+n),o.src=e),p[e]=[t];var l=function(t,n){o.onerror=o.onload=null,clearTimeout(s);var r=p[e];if(delete p[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},w.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},w.p=(!(b=window.__nocobase_public_path__||"/").endsWith("/")&&(b+="/"),b+"static/plugins/@nocobase/plugin-acl/dist/client/"),h={909:0},w.f.j=function(e,t){var n=w.o(h,e)?h[e]:void 0;if(0!==n){if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=h[e]=[t,r]});t.push(n[2]=r);var o=w.p+w.u(e),i=Error();w.l(o,function(t){if(w.o(h,e)&&(0!==(n=h[e])&&(h[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}}},y=function(e,t){var n=t[0],r=t[1],o=t[2],i,u,a=0;if(n.some(function(e){return 0!==h[e]})){for(i in r)w.o(r,i)&&(w.m[i]=r[i]);o&&o(w)}for(e&&e(t);a<n.length;a++)u=n[a],w.o(h,u)&&h[u]&&h[u][0](),h[u]=0},(m=self.webpackChunk_nocobase_plugin_acl=self.webpackChunk_nocobase_plugin_acl||[]).forEach(y.bind(null,0)),m.push=y.bind(null,m.push.bind(m)),w("371")}()});
|
package/dist/externalVersion.js
CHANGED
|
@@ -8,23 +8,23 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
module.exports = {
|
|
11
|
-
"@nocobase/client": "1.7.0-beta.
|
|
12
|
-
"antd": "5.
|
|
11
|
+
"@nocobase/client": "1.7.0-beta.9",
|
|
12
|
+
"antd": "5.24.2",
|
|
13
13
|
"react": "18.2.0",
|
|
14
14
|
"react-i18next": "11.18.6",
|
|
15
15
|
"@formily/shared": "2.3.2",
|
|
16
|
+
"ahooks": "3.7.8",
|
|
16
17
|
"@formily/react": "2.3.0",
|
|
17
18
|
"@ant-design/icons": "5.6.1",
|
|
18
|
-
"@nocobase/utils": "1.7.0-beta.
|
|
19
|
-
"@nocobase/actions": "1.7.0-beta.
|
|
20
|
-
"@nocobase/cache": "1.7.0-beta.
|
|
21
|
-
"@nocobase/database": "1.7.0-beta.
|
|
22
|
-
"@nocobase/server": "1.7.0-beta.
|
|
19
|
+
"@nocobase/utils": "1.7.0-beta.9",
|
|
20
|
+
"@nocobase/actions": "1.7.0-beta.9",
|
|
21
|
+
"@nocobase/cache": "1.7.0-beta.9",
|
|
22
|
+
"@nocobase/database": "1.7.0-beta.9",
|
|
23
|
+
"@nocobase/server": "1.7.0-beta.9",
|
|
23
24
|
"lodash": "4.17.21",
|
|
24
|
-
"@nocobase/test": "1.7.0-beta.
|
|
25
|
+
"@nocobase/test": "1.7.0-beta.9",
|
|
25
26
|
"@formily/core": "2.3.0",
|
|
26
|
-
"
|
|
27
|
-
"@formily/antd-v5": "1.1.9",
|
|
27
|
+
"@formily/antd-v5": "1.2.3",
|
|
28
28
|
"antd-style": "3.7.1",
|
|
29
|
-
"@nocobase/acl": "1.7.0-beta.
|
|
29
|
+
"@nocobase/acl": "1.7.0-beta.9"
|
|
30
30
|
};
|
package/dist/locale/en-US.json
CHANGED
|
@@ -3,5 +3,16 @@
|
|
|
3
3
|
"The user role does not exist. Please try signing in again": "The user role does not exist. Please try signing in again",
|
|
4
4
|
"New role": "New role",
|
|
5
5
|
"Permissions": "Permissions",
|
|
6
|
-
"Desktop menu": "Desktop menu"
|
|
6
|
+
"Desktop menu": "Desktop menu",
|
|
7
|
+
"Independent roles": "Independent roles",
|
|
8
|
+
"Allow roles union": "Allow roles union",
|
|
9
|
+
"Roles union only": "Roles union only",
|
|
10
|
+
"Role mode": "Role mode",
|
|
11
|
+
"Saved successfully": "Saved successfully",
|
|
12
|
+
"Please select role mode": "Please select role mode",
|
|
13
|
+
"Full permissions": "Full permissions",
|
|
14
|
+
"Role mode doc": "https://docs.nocobase.com/handbook/acl/manual",
|
|
15
|
+
"Do not use role union. Users need to switch between their roles individually.": "Do not use role union. Users need to switch between their roles individually.",
|
|
16
|
+
"Allow users to use role union, which means they can use permissions from all their roles simultaneously, or switch between individual roles.": "Allow users to use role union, which means they can use permissions from all their roles simultaneously, or switch between individual roles.",
|
|
17
|
+
"Force users to use only role union. They cannot switch between individual roles.": "Force users to use only role union. They cannot switch between individual roles."
|
|
7
18
|
}
|
package/dist/locale/zh-CN.json
CHANGED
|
@@ -7,5 +7,16 @@
|
|
|
7
7
|
"General": "通用",
|
|
8
8
|
"Desktop menu": "桌面端菜单",
|
|
9
9
|
"Plugin settings": "插件设置",
|
|
10
|
-
"Data sources": "数据源"
|
|
11
|
-
|
|
10
|
+
"Data sources": "数据源",
|
|
11
|
+
"Independent roles": "独立角色",
|
|
12
|
+
"Allow roles union": "允许角色并集",
|
|
13
|
+
"Roles union only": "仅角色并集",
|
|
14
|
+
"Role mode": "角色模式",
|
|
15
|
+
"Saved successfully": "保存成功",
|
|
16
|
+
"Please select role mode": "请选择角色模式",
|
|
17
|
+
"Full permissions": "全部权限",
|
|
18
|
+
"Role mode doc": "https://docs-cn.nocobase.com/handbook/acl/manual",
|
|
19
|
+
"Do not use role union. Users need to switch between their roles individually.": "不使用角色并集,用户需要逐个切换自己拥有的角色。",
|
|
20
|
+
"Allow users to use role union, which means they can use permissions from all their roles simultaneously, or switch between individual roles.": "允许用户使用角色并集,即可以同时使用自己拥有的所有角色的权限,也允许用户逐个切换自己的角色。",
|
|
21
|
+
"Force users to use only role union. They cannot switch between individual roles.": "强制用户仅能使用角色并集,不能逐个切换角色。"
|
|
22
|
+
}
|
|
@@ -1,9 +1 @@
|
|
|
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
1
|
export declare function checkAction(ctx: any, next: any): Promise<void>;
|
|
@@ -29,6 +29,8 @@ __export(role_check_exports, {
|
|
|
29
29
|
checkAction: () => checkAction
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(role_check_exports);
|
|
32
|
+
var import_acl = require("@nocobase/acl");
|
|
33
|
+
var import_enum = require("../enum");
|
|
32
34
|
const map2obj = (map) => {
|
|
33
35
|
const obj = {};
|
|
34
36
|
for (const [key, value] of map) {
|
|
@@ -37,45 +39,53 @@ const map2obj = (map) => {
|
|
|
37
39
|
return obj;
|
|
38
40
|
};
|
|
39
41
|
async function checkAction(ctx, next) {
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
+
const currentRoles = ctx.state.currentRoles;
|
|
43
|
+
const roleInstances = await ctx.db.getRepository("roles").find({
|
|
42
44
|
filter: {
|
|
43
|
-
name:
|
|
45
|
+
name: currentRoles
|
|
44
46
|
},
|
|
45
47
|
appends: ["menuUiSchemas"]
|
|
46
48
|
});
|
|
47
|
-
if (!
|
|
48
|
-
throw new Error(`Role ${
|
|
49
|
+
if (!roleInstances.length) {
|
|
50
|
+
throw new Error(`Role ${currentRoles} not exists`);
|
|
49
51
|
}
|
|
50
52
|
const anonymous = await ctx.db.getRepository("roles").findOne({
|
|
51
53
|
filter: {
|
|
52
54
|
name: "anonymous"
|
|
53
55
|
}
|
|
54
56
|
});
|
|
55
|
-
let
|
|
56
|
-
if (!
|
|
57
|
-
await ctx.app.emitAsync("acl:writeRoleToACL",
|
|
58
|
-
|
|
57
|
+
let roles = ctx.app.acl.getRoles(currentRoles);
|
|
58
|
+
if (!roles.length) {
|
|
59
|
+
await Promise.all(roleInstances.map((x) => ctx.app.emitAsync("acl:writeRoleToACL", x)));
|
|
60
|
+
roles = ctx.app.acl.getRoles(currentRoles);
|
|
59
61
|
}
|
|
60
62
|
const availableActions = ctx.app.acl.getAvailableActions();
|
|
63
|
+
const role = (0, import_acl.mergeRole)(roles);
|
|
64
|
+
const allowMenuItemIds = roleInstances.flatMap(
|
|
65
|
+
(roleInstance) => roleInstance.get("menuUiSchemas").map((uiSchema) => uiSchema.get("x-uid"))
|
|
66
|
+
);
|
|
61
67
|
let uiButtonSchemasBlacklist = [];
|
|
62
|
-
|
|
68
|
+
const currentRole = ctx.state.currentRole;
|
|
69
|
+
if (!currentRoles.includes("root")) {
|
|
63
70
|
const eqCurrentRoleList = await ctx.db.getRepository("uiButtonSchemasRoles").find({
|
|
64
|
-
filter: {
|
|
71
|
+
filter: { roleName: currentRoles }
|
|
65
72
|
}).then((list) => list.map((v) => v.uid));
|
|
66
73
|
const NECurrentRoleList = await ctx.db.getRepository("uiButtonSchemasRoles").find({
|
|
67
|
-
filter: { "roleName.$
|
|
74
|
+
filter: { "roleName.$notIn": currentRoles }
|
|
68
75
|
}).then((list) => list.map((v) => v.uid));
|
|
69
76
|
uiButtonSchemasBlacklist = NECurrentRoleList.filter((uid) => !eqCurrentRoleList.includes(uid));
|
|
70
77
|
}
|
|
78
|
+
const systemSettings = await ctx.db.getRepository("systemSettings").findOne();
|
|
79
|
+
const roleMode = (systemSettings == null ? void 0 : systemSettings.get("roleMode")) || import_enum.SystemRoleMode.default;
|
|
71
80
|
ctx.body = {
|
|
72
|
-
...role
|
|
81
|
+
...role,
|
|
82
|
+
role: currentRole,
|
|
83
|
+
roleMode,
|
|
73
84
|
availableActions: [...availableActions.keys()],
|
|
74
|
-
resources: [...role.resources.keys()],
|
|
75
85
|
actionAlias: map2obj(ctx.app.acl.actionAlias),
|
|
76
|
-
allowAll:
|
|
77
|
-
allowConfigure:
|
|
78
|
-
allowMenuItemIds:
|
|
86
|
+
allowAll: !!currentRoles.includes("root"),
|
|
87
|
+
allowConfigure: !!roleInstances.find((x) => x.get("allowConfigure")),
|
|
88
|
+
allowMenuItemIds: [...new Set(allowMenuItemIds)],
|
|
79
89
|
allowAnonymous: !!anonymous,
|
|
80
90
|
uiButtonSchemasBlacklist
|
|
81
91
|
};
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
export declare const setSystemRoleMode: (ctx: any, next: any) => Promise<void>;
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var union_role_exports = {};
|
|
28
|
+
__export(union_role_exports, {
|
|
29
|
+
setSystemRoleMode: () => setSystemRoleMode
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(union_role_exports);
|
|
32
|
+
var import_enum = require("../enum");
|
|
33
|
+
const setSystemRoleMode = async (ctx, next) => {
|
|
34
|
+
var _a;
|
|
35
|
+
const roleMode = (_a = ctx.action.params.values) == null ? void 0 : _a.roleMode;
|
|
36
|
+
if (!import_enum.SystemRoleMode.validate(roleMode)) {
|
|
37
|
+
throw new Error("Invalid role mode");
|
|
38
|
+
}
|
|
39
|
+
await ctx.db.getRepository("systemSettings").update({
|
|
40
|
+
filterByTk: 1,
|
|
41
|
+
values: { roleMode }
|
|
42
|
+
});
|
|
43
|
+
await next();
|
|
44
|
+
};
|
|
45
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
46
|
+
0 && (module.exports = {
|
|
47
|
+
setSystemRoleMode
|
|
48
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var systemSettings_exports = {};
|
|
28
|
+
__export(systemSettings_exports, {
|
|
29
|
+
default: () => systemSettings_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(systemSettings_exports);
|
|
32
|
+
var import_database = require("@nocobase/database");
|
|
33
|
+
var systemSettings_default = (0, import_database.extendCollection)({
|
|
34
|
+
name: "systemSettings",
|
|
35
|
+
fields: [
|
|
36
|
+
{
|
|
37
|
+
type: "string",
|
|
38
|
+
name: "roleMode",
|
|
39
|
+
defaultValue: "default"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
export declare const UNION_ROLE_KEY = "__union__";
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var constants_exports = {};
|
|
28
|
+
__export(constants_exports, {
|
|
29
|
+
UNION_ROLE_KEY: () => UNION_ROLE_KEY
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(constants_exports);
|
|
32
|
+
const UNION_ROLE_KEY = "__union__";
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
UNION_ROLE_KEY
|
|
36
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
export declare const SystemRoleMode: {
|
|
10
|
+
readonly default: "default";
|
|
11
|
+
readonly allowUseUnion: "allow-use-union";
|
|
12
|
+
readonly onlyUseUnion: "only-use-union";
|
|
13
|
+
readonly validate: (value: string) => boolean;
|
|
14
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
12
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __export = (target, all) => {
|
|
15
|
+
for (var name in all)
|
|
16
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
|
+
};
|
|
18
|
+
var __copyProps = (to, from, except, desc) => {
|
|
19
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
+
for (let key of __getOwnPropNames(from))
|
|
21
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
22
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
27
|
+
var enum_exports = {};
|
|
28
|
+
__export(enum_exports, {
|
|
29
|
+
SystemRoleMode: () => SystemRoleMode
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(enum_exports);
|
|
32
|
+
const SystemRoleMode = {
|
|
33
|
+
default: "default",
|
|
34
|
+
allowUseUnion: "allow-use-union",
|
|
35
|
+
onlyUseUnion: "only-use-union",
|
|
36
|
+
validate(value) {
|
|
37
|
+
return Object.values(this).includes(value);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
SystemRoleMode
|
|
43
|
+
});
|
package/dist/server/index.d.ts
CHANGED
|
@@ -10,4 +10,6 @@ export * from './middlewares/setCurrentRole';
|
|
|
10
10
|
export * from './middlewares/with-acl-meta';
|
|
11
11
|
export { RoleResourceActionModel } from './model/RoleResourceActionModel';
|
|
12
12
|
export { RoleResourceModel } from './model/RoleResourceModel';
|
|
13
|
+
export * from './constants';
|
|
14
|
+
export * from './enum';
|
|
13
15
|
export { default } from './server';
|
package/dist/server/index.js
CHANGED
|
@@ -46,11 +46,15 @@ __reExport(server_exports, require("./middlewares/setCurrentRole"), module.expor
|
|
|
46
46
|
__reExport(server_exports, require("./middlewares/with-acl-meta"), module.exports);
|
|
47
47
|
var import_RoleResourceActionModel = require("./model/RoleResourceActionModel");
|
|
48
48
|
var import_RoleResourceModel = require("./model/RoleResourceModel");
|
|
49
|
+
__reExport(server_exports, require("./constants"), module.exports);
|
|
50
|
+
__reExport(server_exports, require("./enum"), module.exports);
|
|
49
51
|
var import_server = __toESM(require("./server"));
|
|
50
52
|
// Annotate the CommonJS export names for ESM import in node:
|
|
51
53
|
0 && (module.exports = {
|
|
52
54
|
RoleResourceActionModel,
|
|
53
55
|
RoleResourceModel,
|
|
54
56
|
...require("./middlewares/setCurrentRole"),
|
|
55
|
-
...require("./middlewares/with-acl-meta")
|
|
57
|
+
...require("./middlewares/with-acl-meta"),
|
|
58
|
+
...require("./constants"),
|
|
59
|
+
...require("./enum")
|
|
56
60
|
});
|
|
@@ -29,6 +29,8 @@ __export(setCurrentRole_exports, {
|
|
|
29
29
|
setCurrentRole: () => setCurrentRole
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(setCurrentRole_exports);
|
|
32
|
+
var import_constants = require("../constants");
|
|
33
|
+
var import_enum = require("../enum");
|
|
32
34
|
async function setCurrentRole(ctx, next) {
|
|
33
35
|
var _a, _b;
|
|
34
36
|
const currentRole = ctx.get("X-Role");
|
|
@@ -60,6 +62,27 @@ async function setCurrentRole(ctx, next) {
|
|
|
60
62
|
roles.forEach((role2) => rolesMap.set(role2.name, role2));
|
|
61
63
|
const userRoles = Array.from(rolesMap.values());
|
|
62
64
|
ctx.state.currentUser.roles = userRoles;
|
|
65
|
+
const systemSettings = await ctx.db.getRepository("systemSettings").findOne();
|
|
66
|
+
const roleMode = (systemSettings == null ? void 0 : systemSettings.get("roleMode")) || import_enum.SystemRoleMode.default;
|
|
67
|
+
if (ctx.state.currentRole === import_constants.UNION_ROLE_KEY && roleMode === import_enum.SystemRoleMode.default) {
|
|
68
|
+
ctx.state.currentRole = userRoles[0].name;
|
|
69
|
+
ctx.headers["x-role"] = userRoles[0].name;
|
|
70
|
+
} else if (roleMode === import_enum.SystemRoleMode.onlyUseUnion) {
|
|
71
|
+
ctx.state.currentRole = import_constants.UNION_ROLE_KEY;
|
|
72
|
+
ctx.headers["x-role"] = import_constants.UNION_ROLE_KEY;
|
|
73
|
+
ctx.state.currentRoles = userRoles.map((role2) => role2.name);
|
|
74
|
+
return next();
|
|
75
|
+
} else if (roleMode === import_enum.SystemRoleMode.allowUseUnion) {
|
|
76
|
+
ctx.state.currentUser.roles = userRoles.concat({
|
|
77
|
+
name: import_constants.UNION_ROLE_KEY,
|
|
78
|
+
title: ctx.t("Full permissions", { ns: "acl" })
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (currentRole === import_constants.UNION_ROLE_KEY) {
|
|
82
|
+
ctx.state.currentRole = import_constants.UNION_ROLE_KEY;
|
|
83
|
+
ctx.state.currentRoles = userRoles.map((role2) => role2.name);
|
|
84
|
+
return next();
|
|
85
|
+
}
|
|
63
86
|
let role;
|
|
64
87
|
if (currentRole) {
|
|
65
88
|
role = (_a = userRoles.find((role2) => role2.name === currentRole)) == null ? void 0 : _a.name;
|
|
@@ -78,7 +101,8 @@ async function setCurrentRole(ctx, next) {
|
|
|
78
101
|
role = (_b = defaultRole || userRoles[0]) == null ? void 0 : _b.name;
|
|
79
102
|
}
|
|
80
103
|
ctx.state.currentRole = role;
|
|
81
|
-
|
|
104
|
+
ctx.state.currentRoles = [role];
|
|
105
|
+
if (!ctx.state.currentRoles.length) {
|
|
82
106
|
return ctx.throw(401, {
|
|
83
107
|
code: "ROLE_NOT_FOUND_ERR",
|
|
84
108
|
message: ctx.t("The user role does not exist. Please try signing in again", { ns: "acl" })
|
package/dist/server/server.js
CHANGED
|
@@ -54,6 +54,7 @@ var import_with_acl_meta = require("./middlewares/with-acl-meta");
|
|
|
54
54
|
var import_RoleModel = require("./model/RoleModel");
|
|
55
55
|
var import_RoleResourceActionModel = require("./model/RoleResourceActionModel");
|
|
56
56
|
var import_RoleResourceModel = require("./model/RoleResourceModel");
|
|
57
|
+
var import_union_role = require("./actions/union-role");
|
|
57
58
|
class PluginACLServer extends import_server.Plugin {
|
|
58
59
|
get acl() {
|
|
59
60
|
return this.app.acl;
|
|
@@ -169,6 +170,7 @@ class PluginACLServer extends import_server.Plugin {
|
|
|
169
170
|
});
|
|
170
171
|
this.app.resourcer.define(import_available_actions.availableActionResource);
|
|
171
172
|
this.app.resourcer.define(import_role_collections.roleCollectionsResource);
|
|
173
|
+
this.app.resourcer.registerActionHandler("roles:setSystemRoleMode", import_union_role.setSystemRoleMode);
|
|
172
174
|
this.app.resourcer.registerActionHandler("roles:check", import_role_check.checkAction);
|
|
173
175
|
this.app.resourcer.registerActionHandler(`users:setDefaultRole`, import_user_setDefaultRole.setDefaultRole);
|
|
174
176
|
this.db.on("users.afterCreateWithAssociations", async (model, options) => {
|
|
@@ -409,7 +411,8 @@ class PluginACLServer extends import_server.Plugin {
|
|
|
409
411
|
this.app.acl.allow("users", "setDefaultRole", "loggedIn");
|
|
410
412
|
this.app.acl.allow("roles", "check", "loggedIn");
|
|
411
413
|
this.app.acl.allow("*", "*", (ctx) => {
|
|
412
|
-
|
|
414
|
+
var _a;
|
|
415
|
+
return (_a = ctx.state.currentRoles) == null ? void 0 : _a.includes("root");
|
|
413
416
|
});
|
|
414
417
|
this.app.acl.addFixedParams("collections", "destroy", () => {
|
|
415
418
|
return {
|
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.7.0-beta.
|
|
7
|
+
"version": "1.7.0-beta.9",
|
|
8
8
|
"license": "AGPL-3.0",
|
|
9
9
|
"main": "./dist/server/index.js",
|
|
10
10
|
"homepage": "https://docs.nocobase.com/handbook/acl",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
34
34
|
"directory": "packages/plugins/acl"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "7013a5080f3695d7750ab21005c90d2172c16480"
|
|
37
37
|
}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
-
|
|
10
|
-
"use strict";(self.webpackChunk_nocobase_plugin_acl=self.webpackChunk_nocobase_plugin_acl||[]).push([["733"],{594:function(e,t,r){r.r(t),r.d(t,{RolesManagement:function(){return M}});var n=r("505"),o=r("772"),a=r("721"),l=r("156"),i=r.n(l),c=r("371"),u=r("888"),s=r("875"),f=function(){var e=(0,u.g)().t;return i().createElement(o.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:function(e){var t,r,n=(0,o.useActionContext)();return(0,o.useRequest)(function(){return Promise.resolve({data:{name:"r_".concat((0,s.uid)()),snippets:["!ui.*","!pm","!pm.*"]}})},(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n,o,a;n=e,o=t,a=r[t],o in n?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a})}return e}({},e),r=(r={refreshDeps:[n.visible]},r),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))}},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 }}"}}}}}}}}}}})},p=r("746"),m=r("482"),y=r("467");function d(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var b={type:"object",properties:d({},(0,s.uid)(),{type:"void","x-component":"Action.Drawer","x-decorator":"Form","x-decorator-props":{useValues:function(e){var t,r,n=(0,o.useRecord)();var a=(0,o.useRequest)(function(){return Promise.resolve({data:(0,y.pick)(n,["title","name","default"])})},(t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){d(e,t,r[t])})}return e}({},e),r=(r={manual:!0},r),Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t)),i=(0,o.useActionContext)();return(0,l.useEffect)(function(){i.visible&&a.run()},[i.visible]),a}},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":function(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 }}"}}}}}})};function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var h=function(e){var t,r,n=e.loadMore;var o=(t=(0,l.useState)(null),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(t,2)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return v(e,t)}}(t,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],i=o[1],c=(0,l.useRef)(null),u=(0,l.useCallback)(function(e){if(!!e)c.current&&c.current.disconnect(),c.current=new IntersectionObserver(function(t){t.forEach(function(t){if(t.target===e.current)t.isIntersecting&&(c.current&&c.current.unobserve(e.current),n())})}),e.current&&c.current&&c.current.observe(e.current)},[n]);return(0,l.useEffect)(function(){return u(a),function(){c.current&&c.current.disconnect()}},[a,u]),{lastItem:a,setLastItem:i}};function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function O(e,t,r,n,o,a,l){try{var i=e[a](l),c=i.value}catch(e){r(e);return}i.done?t(c):Promise.resolve(c).then(n,o)}function w(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var a=e.apply(t,r);function l(e){O(a,n,o,l,i,"next",e)}function i(e){O(a,n,o,l,i,"throw",e)}l(void 0)})}}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(e,t)||A(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e){return function(e){if(Array.isArray(e))return g(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e,t){if(e){if("string"==typeof e)return g(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return g(e,t)}}function S(e,t){var r,n,o,a,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function i(a){return function(i){return function(a){if(r)throw TypeError("Generator is already executing.");for(;l;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return l.label++,{value:a[1],done:!1};case 5:l.label++,n=a[1],a=[0];continue;case 7:a=l.ops.pop(),l.trys.pop();continue;default:if(!(o=(o=l.trys).length>0&&o[o.length-1])&&(6===a[0]||2===a[0])){l=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){l.label=a[1];break}if(6===a[0]&&l.label<o[1]){l.label=o[1],o=a;break}if(o&&l.label<o[2]){l.label=o[2],l.ops.push(a);break}o[2]&&l.ops.pop(),l.trys.pop();continue}a=t.call(e,l)}catch(e){a=[6,e],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,i])}}}var j=function(){var e=(0,u.g)().t,t=(0,o.useResourceActionContext)(),r=t.data,n=t.mutate,c=x((0,l.useState)(!1),2),s=c[0],f=c[1],m=x((0,l.useState)(null),2),y=m[0],d=m[1],v=(0,l.useContext)(p.T),g=v.role,O=v.setRole,A=x((0,l.useState)([]),2),P=A[0],C=A[1],I=x((0,l.useState)(!1),2),k=I[0],D=I[1],R=(0,o.useAPIClient)(),T=h({loadMore:(0,l.useCallback)(w(function(){var e,t;return S(this,function(o){switch(o.label){case 0:if(!(e=null==r?void 0:r.meta)||e.page>=e.totalPage)return[2];return D(!0),[4,R.resource("roles").list({page:e.page+1,pageSize:e.pageSize,filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]})];case 1:return n((null==(t=o.sent())?void 0:t.data)||{}),D(!1),[2]}})}),[r])}),F=T.lastItem,M=T.setLastItem;(0,l.useEffect)(function(){if(!!P[0])O(P[0])},[P,O]),(0,l.useEffect)(function(){var e,t;if(!!(null==r?void 0:null===(e=r.data)||void 0===e?void 0:e.length))M(i().createRef()),(null===(t=r.meta)||void 0===t?void 0:t.page)>1?C(function(e){return e.concat(r.data)}):C(r.data)},[r,M]);var U=(0,l.useMemo)(function(){return P.map(function(e,t){return{key:e.name,label:t===P.length-1?i().createElement("div",{ref:F},i().createElement(j.Item,{item:e,onEdit:function(){f(!0),d(e)}})):i().createElement(j.Item,{item:e,onEdit:function(){f(!0),d(e)}})}})},[P,F]);return i().createElement(i().Fragment,null,P.length?i().createElement(a.Menu,{style:{border:"none",maxHeight:"65vh",overflowY:"auto"},items:E(U).concat(E(k?[{key:"loading",label:i().createElement(a.Spin,null)}]:[])),selectedKeys:[null==g?void 0:g.name],onSelect:function(e){var t=e.key;O(P.find(function(e){return e.name===t}))}}):i().createElement(a.Empty,{image:a.Empty.PRESENTED_IMAGE_SIMPLE}),i().createElement(o.ActionContextProvider,{value:{visible:s,setVisible:f}},i().createElement(o.RecordProvider,{record:y,collectionName:"departments"},i().createElement(o.SchemaComponent,{scope:{t:e},schema:b}))))};j.Item=function(e){var t=e.item,r=e.onEdit,l=(0,u.g)().t,c=(0,o.useResourceActionContext)().refreshAsync,s=a.App.useApp(),f=s.modal,p=s.message,y=(0,o.useAPIClient)(),d=function(){f.confirm({title:l("Delete"),content:l("Are you sure you want to delete it?"),onOk:w(function(){return S(this,function(e){switch(e.label){case 0:return[4,y.resource("roles").destroy({filterByTk:t.name})];case 1:return e.sent(),p.success(l("Deleted successfully")),[4,c()];case 2:return e.sent(),[2]}})})})},b=n.Schema.compile(t.title,{t:l});return i().createElement(a.Row,null,i().createElement(a.Col,{flex:3,style:{display:"inline-flex",alignItems:"center"}},i().createElement("span",{style:{whiteSpace:"nowrap",width:"120px",overflow:"hidden",textOverflow:"ellipsis"}},i().createElement(m.TagOutlined,null),i().createElement("span",{style:{marginLeft:"10px"},title:b},b))),i().createElement(a.Col,null,t.default?i().createElement(a.Tag,{color:"success",bordered:!1},l("Default")):null,i().createElement(a.Dropdown,{menu:{items:[{label:l("Edit"),key:"edit"},{label:l("Delete"),key:"delete"}],onClick:function(e){var t=e.key;switch(e.domEvent.stopPropagation(),t){case"edit":r();break;case"delete":d()}}}},i().createElement(m.MoreOutlined,null))))};var P=r("844");function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var I=function(e){return i().createElement("div",{style:{maxHeight:"60vh",overflowY:"auto"}},e.children)},k=function(e){var t,r,n=e.active,s=(0,u.g)().t;var f=(t=i().useState("general"),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(t,2)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return C(e,t)}}(t,r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),m=f[0],y=f[1],d=(0,l.useContext)(p.T),b=d.role,v=d.setRole,h=(0,o.usePlugin)(c.default),g=(0,o.useACLRoleContext)(),O=(0,l.useMemo)(function(){return h.settingsUI.getPermissionsTabs({t:s,activeKey:m,TabLayout:I,activeRole:b,currentUserRole:g}).filter(Boolean)},[m,h.settingsUI,b,s,g]),w=(0,o.useAPIClient)(),x=(0,o.useRequest)(function(){return w.resource("roles").get({filterByTk:null==b?void 0:b.name}).then(function(e){var t,r,n=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.data;return null===(r=n.snippets)||void 0===r||r.forEach(function(e){n[e]=!0}),n})},{ready:n&&!!b,refreshDeps:[null==b?void 0:b.name]}).data;return(0,l.useEffect)(function(){y("general")},[null==b?void 0:b.name]),(0,l.useEffect)(function(){v(x)},[x,v]),i().createElement(P.U,null,i().createElement(a.Tabs,{type:"card",activeKey:m,onChange:function(e){return y(e)},items:O}))};function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function R(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(r=o.next()).done)&&(a.push(r.value),!t||a.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{!l&&null!=o.return&&o.return()}finally{if(i)throw n}}return a}}(e,t)||T(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(e,t){if(e){if("string"==typeof e)return D(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return D(e,t)}}var F={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"}}]},M=function(){var e,t=(0,u.g)().t,r=(0,o.usePlugin)(c.default),s=R(i().useState("permissions"),2),m=s[0],y=s[1],d=Array.from(r.rolesManager.list()).map(function(e){var r=R(e,2),o=r[0],a=r[1];return{key:o,label:n.Schema.compile(a.title,{t:t}),children:a.Component?i().createElement(a.Component,{active:m===o}):null}}),b=R((0,l.useState)(null),2),v=b[0],h=b[1],g=(0,o.useSchemaComponentContext)(),O=(0,l.useMemo)(function(){var e,t;return e=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n,o,a;n=e,o=t,a=r[t],o in n?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a})}return e}({},g),t=(t={designable:!1},t),Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e},[g]);return i().createElement(o.SchemaComponentContext.Provider,{value:O},i().createElement(p.T.Provider,{value:{role:v,setRole:h}},i().createElement(a.Card,null,i().createElement(a.Row,{gutter:24,style:{flexWrap:"nowrap"}},i().createElement(a.Col,{flex:"280px",style:{borderRight:"1px solid #eee",minWidth:"250px"}},i().createElement(o.ResourceActionProvider,{collection:F,request:{resource:"roles",action:"list",params:{filter:{"name.$ne":"root"},showAnonymous:!0,sort:["createdAt"],appends:[]}}},i().createElement(o.CollectionProvider_deprecated,{collection:F},i().createElement(a.Row,null,i().createElement(f,null)),i().createElement(a.Divider,{style:{margin:"12px 0"}}),i().createElement(j,null)))),i().createElement(a.Col,{flex:"auto",style:{overflow:"hidden"}},i().createElement(a.Tabs,{activeKey:m,onChange:function(e){return y(e)},items:[{key:"permissions",label:t("Permissions"),children:i().createElement(k,{active:"permissions"===m})}].concat(function(e){if(Array.isArray(e))return D(e)}(e=d)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||T(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())}))))))}},844:function(e,t,r){r.d(t,{U:function(){return c},r:function(){return u}});var n=r(772),o=r(721),a=r(156),l=r.n(a),i=(0,a.createContext)([]);i.displayName="AvailableActionsContext";var c=function(e){var t=(0,n.useRequest)({resource:"availableActions",action:"list"}),r=t.data;return t.loading?l().createElement(o.Spin,null):l().createElement(i.Provider,{value:null==r?void 0:r.data},e.children)},u=function(){return(0,a.useContext)(i)}},888:function(e,t,r){r.d(t,{g:function(){return o}});var n=r(238);function o(){return(0,n.useTranslation)(["@nocobase/plugin-acl","client"],{nsMode:"fallback"})}}}]);
|