diff --git a/src/App.svelte b/src/App.svelte index 90ccbcef..806ac3f2 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -48,7 +48,7 @@ OpenAPI.BASE = config.baseurl; import { register as registerSW } from "./swmodule"; import TeamDetail from "./components/TeamDetail.svelte"; - import RunnerDetail from "./components/RunnerDetail.svelte"; + import UserPermissions from "./components/UserPermissions.svelte"; store.init(); registerSW(); @@ -72,8 +72,13 @@ - - + + + + + + + @@ -82,13 +87,8 @@ - - - - - - - + + diff --git a/src/components/AddUserModal.svelte b/src/components/AddUserModal.svelte index c8b232fe..6298e61a 100644 --- a/src/components/AddUserModal.svelte +++ b/src/components/AddUserModal.svelte @@ -28,7 +28,10 @@ $: isLastnameValid = lastname_input_value.trim().length !== 0; $: isFirstnameValid = firstname_input_value.trim().length !== 0; $: createbtnenabled = - isFirstnameValid && isLastnameValid && isEmailValid && isPasswordValid; + isFirstnameValid && + isLastnameValid && + isPasswordValid && + !(!isEmailValid && username_input_value.trim().length === 0); (function () { document.onkeydown = function (e) { e = e || window.event; @@ -50,19 +53,14 @@ text: "User is being added...", duration: -1, }).showToast(); - let postdata={ + UserService.userControllerPost({ firstname: firstname_input_value, lastname: lastname_input_value, middlename: middlename_input_value, - password: password_input_value - }; - if(email_input_value!==""){ - postdata.email=email_input_value; - } - if(username_input_value!==""){ - postdata.username=username_input_value; - } - UserService.userControllerPost(postdata) + password: password_input_value, + email: email_input_value, + username: username_input_value, + }) .then((result) => { firstname_input_value = ""; lastname_input_value = ""; @@ -77,7 +75,7 @@ backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", }).showToast(); current_users.push(result); - current_users=current_users; + current_users = current_users; }) .catch((err) => { // @@ -238,18 +236,21 @@ - {#if !isEmailValid} + + {#if !isEmailValid && username_input_value.trim().length === 0} + + valid email or username is required {/if} diff --git a/src/components/UserDetail.svelte b/src/components/UserDetail.svelte index e1170eba..e60db298 100644 --- a/src/components/UserDetail.svelte +++ b/src/components/UserDetail.svelte @@ -2,31 +2,63 @@ import { _ } from "svelte-i18n"; import lodashIsEqual from "lodash.isequal"; import store from "../store"; - import { - UserService, - UserGroupService, - PermissionService, - } from "@odit/lfk-client-js"; + import { UserService, UserGroupService } from "@odit/lfk-client-js"; import Toastify from "toastify-js"; import PromiseError from "./PromiseError.svelte"; export let params; const user_promise = UserService.userControllerGetOne(params.userid); let data_loaded = false; + let usergroups_array_original = []; + const colors = [ + "#f3558e", + "#17b978", + "#3498db", + "#3f3b3b", + "#775ada", + "#7ed6df_#000000", + "#000000", + "#21e6c1_#000000", + "#c0392b", + "#d35400", + "#7f8c8d", + "#6ab04c", + "#4834d4", + "#ff1f5a", + "#eac100", + ]; + let matched_colors = []; $: delete_triggered = false; $: original_data = {}; $: editable_userdata = {}; - $: allpermissions = []; $: allgroups = []; $: allgroups_ids = []; - $: usergroups_array_objects = []; $: usergroups_array = []; - let usergroups_array_original = []; + $: search_permission = ""; user_promise.then((data) => { + let current_target = ""; + let colorindex = -1; + // alphabetically sort permissions for color compatibility for target + data.permissions = data.permissions.sort(); + data.permissions.forEach((p) => { + const target = p.split(":")[0]; + if (current_target !== p.split(":")[0]) { + colorindex++; + current_target = p.split(":")[0]; + } + let background = colors[colorindex]; + let foreground = "#fff"; + if (background.includes("_")) { + foreground = background.split("_")[1]; + background = background.split("_")[0]; + } + matched_colors[target] = [background, foreground]; + }); + // data_loaded = true; original_data = Object.assign(original_data, data); editable_userdata = data; data.groups.forEach((g) => { - usergroups_array=usergroups_array.concat([g.id]); + usergroups_array = usergroups_array.concat([g.id]); }); usergroups_array_original = usergroups_array; allgroups.forEach((g) => { @@ -36,37 +68,28 @@ UserGroupService.userGroupControllerGetAll().then((data) => { allgroups = data; }); - const permissions_promise = PermissionService.permissionControllerGetAll(); - permissions_promise.then((data) => { - data.forEach((p) => { - allpermissions=allpermissions.concat([p.target + ":" + p.action]) - }); - }); $: changes_performed = !lodashIsEqual(original_data, editable_userdata); - $: groups_changed = JSON.stringify(usergroups_array)===JSON.stringify(usergroups_array_original); - $: save_enabled = changes_performed||!groups_changed; + $: groups_changed = + JSON.stringify(usergroups_array) === + JSON.stringify(usergroups_array_original); + $: save_enabled = changes_performed || !groups_changed; function submit() { - if ( - !lodashIsEqual(original_data.permissions, editable_userdata.permissions) - ) { - // TODO: add+delete permissions - } if (data_loaded === true && save_enabled) { - let tmp=[]; - usergroups_array.forEach(g => { - const group=allgroups.find(obj=>obj.id===g); - tmp.push(group); - }); - editable_userdata.groups=tmp; + editable_userdata.groups = usergroups_array; Toastify({ text: $_("updating-user"), duration: 2500, }).showToast(); UserService.userControllerPut(original_data.id, editable_userdata) .then((resp) => { - Object.assign(original_data, editable_userdata); - original_data = editable_userdata; - Object.assign(original_data, editable_userdata); + Object.assign(original_data, resp); + Object.assign(editable_userdata, resp); + original_data.permissions = resp.permissions; + usergroups_array = []; + resp.groups.forEach((g) => { + usergroups_array = usergroups_array.concat([g.id]); + }); + usergroups_array_original = usergroups_array; // Toastify({ text: $_("user-updated"), @@ -74,9 +97,7 @@ backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)", }).showToast(); }) - .catch((err) => { - }); - } else { + .catch((err) => {}); } } function deleteUser() { @@ -84,8 +105,7 @@ .then((resp) => { location.replace("./"); }) - .catch((err) => { - }); + .catch((err) => {}); } @@ -135,7 +155,7 @@ -
+
{original_data.firstname} {original_data.middlename || ''} {original_data.lastname} @@ -170,31 +190,30 @@ {/if}
-
+
+

Profile Picture

{$_('profile-picture')} -
-
- { - editable_userdata.enabled = !editable_userdata.enabled; - // TODO: this reactive set does not work? - }} - name="enabled" - type="checkbox" - checked={editable_userdata.enabled} - class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" /> -

set the user active/ inactive

+
+

+ { + editable_userdata.enabled = !editable_userdata.enabled; + }} + name="enabled" + type="checkbox" + checked={editable_userdata.enabled} + class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" /> + set the user active/ inactive +

{$_('groups')}
-
- Permissions -
- -
-
- verfügbare -
-
erteilte
-
- -
- {#if allpermissions.length > 0} -
-
- {#each allpermissions as p} - {#if !editable_userdata.permissions.includes(p)} -

- {p} - -

- {/if} - {/each} -
-
-
-
- {#each allpermissions as p} - {#if editable_userdata.permissions.includes(p)} -

- {p} - -

- {/if} - {/each} -
-
- {/if} -
+
+

+ {$_('permissions')} + {$_('edit-permissions')} +

+
+
+ {#each original_data.permissions as p} + {#if p.toLowerCase().includes(search_permission.toLowerCase())} + {p} + + {/if} + {/each}
{:catch error} diff --git a/src/components/UserPermissions.svelte b/src/components/UserPermissions.svelte new file mode 100644 index 00000000..1ae23e20 --- /dev/null +++ b/src/components/UserPermissions.svelte @@ -0,0 +1,241 @@ + + +{#await user_promise} + +{:then user} +
+ +
+ Permissions: + {original_data.firstname} + {original_data.middlename || ''} + {original_data.lastname} + + {#if promises.length === 0} + + {:else} + + {/if} + +
+ +
+
verfügbare
+
erteilte
+
geerbte
+
+ +
+ {#if allpermissions.length > 0} +
+
+ {#each allpermissions as p} + {#if !grantedPermissions.includes(p)} +

+ {p.target + ':' + p.action} + +

+ {/if} + {/each} +
+
+
+
+ {#each grantedPermissions as p} +

+ {p.target + ':' + p.action} + +

+ {/each} +
+
+
+
+ {#each inheritedPermissions as p} +

+ {p.target + ':' + p.action} +

+ {/each} +
+
+ {/if} +
+
+{:catch error} + +{/await} diff --git a/src/components/UsersEmptyState.svelte b/src/components/UsersEmptyState.svelte index a4bd3ba7..9229ec8d 100644 --- a/src/components/UsersEmptyState.svelte +++ b/src/components/UsersEmptyState.svelte @@ -1,11 +1,13 @@

+ There are no users added yet.
Add your first user

diff --git a/src/components/UsersOverview.svelte b/src/components/UsersOverview.svelte index ee40384e..014ad6ef 100644 --- a/src/components/UsersOverview.svelte +++ b/src/components/UsersOverview.svelte @@ -29,17 +29,17 @@ {#if current_users.length === 0} {:else} - {#if advanced_search} + - {/if} -