diff --git a/src/App.svelte b/src/App.svelte index c5548087..6c4c2626 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -50,6 +50,7 @@ OpenAPI.BASE = config.baseurl; import { register as registerSW } from "./swmodule"; import TeamDetail from "./components/TeamDetail.svelte"; + import UserPermissions from "./components/UserPermissions.svelte"; store.init(); // registerSW(); @@ -73,8 +74,13 @@ - - + + + + + + + diff --git a/src/components/UserPermissions.svelte b/src/components/UserPermissions.svelte new file mode 100644 index 00000000..be72504c --- /dev/null +++ b/src/components/UserPermissions.svelte @@ -0,0 +1,249 @@ + + +{#await user_promise} + +{:then user} + + + + + + + + + + {$_('users')} + + + + {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + + + + + + Permissions + + + + + + + Permissions: + {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + {$_('save-changes')} + + + + + verfügbare + erteilte + geerbte + + + + {#if allpermissions.length > 0} + + + {#each allpermissions as p} + {#if !grantedPermissions.includes(p)} + + {p.target + ':' + p.action} + { + grantedPermissions = grantedPermissions.concat([p]); + if (to_delete.some((o) => o === p.id)) { + to_delete = to_delete.filter((o) => o !== p.id); + } else { + to_add = to_add.concat([ + { + action: p.action, + target: p.target, + principal: original_data.id, + }, + ]); + } + console.log({ to_delete, to_add }); + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-green-200 text-base font-medium text-black hover:bg-green-700 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 sm:ml-3 sm:w-auto sm:text-sm">+ + + {/if} + {/each} + + + + + {#each grantedPermissions as p} + + {p.target + ':' + p.action} + { + grantedPermissions = grantedPermissions.filter((o) => o.target + ':' + o.action !== p.target + ':' + p.action); + if (to_add.some((o) => o.target + ':' + o.action === p.target + ':' + p.action)) { + to_add = to_add.filter((o) => o.target + ':' + o.action !== p.target + ':' + p.action); + } else { + to_delete = to_delete.concat([p.id]); + } + console.log({ to_delete, to_add }); + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-300 text-base font-medium text-black hover:bg-red-700 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 sm:ml-3 sm:w-auto sm:text-sm">- + + {/each} + + + + + {#each inheritedPermissions as p} + + {p.target + ':' + p.action} + + {/each} + + + {/if} + + +{:catch error} + +{/await}
+ {p.target + ':' + p.action} + { + grantedPermissions = grantedPermissions.concat([p]); + if (to_delete.some((o) => o === p.id)) { + to_delete = to_delete.filter((o) => o !== p.id); + } else { + to_add = to_add.concat([ + { + action: p.action, + target: p.target, + principal: original_data.id, + }, + ]); + } + console.log({ to_delete, to_add }); + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-green-200 text-base font-medium text-black hover:bg-green-700 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 sm:ml-3 sm:w-auto sm:text-sm">+ +
+ {p.target + ':' + p.action} + { + grantedPermissions = grantedPermissions.filter((o) => o.target + ':' + o.action !== p.target + ':' + p.action); + if (to_add.some((o) => o.target + ':' + o.action === p.target + ':' + p.action)) { + to_add = to_add.filter((o) => o.target + ':' + o.action !== p.target + ':' + p.action); + } else { + to_delete = to_delete.concat([p.id]); + } + console.log({ to_delete, to_add }); + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-300 text-base font-medium text-black hover:bg-red-700 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 sm:ml-3 sm:w-auto sm:text-sm">- +
+ {p.target + ':' + p.action} +