checking for permission to display permissions

This commit is contained in:
Patrick 2025-08-25 16:53:11 +02:00
parent a46c302be8
commit 1049b04968
1 changed files with 78 additions and 63 deletions

View File

@ -48,69 +48,6 @@
</tbody>
</table>
<table>
<colgroup>
<col class="leader2" />
<col class="form2" />
</colgroup>
<thead>
<tr><th colspan="2">Berechtigungen</th></tr>
</thead>
<tbody>
<tr>
<td>Benutzerverwaltung</td>
<td>
<div class="permission-selector">
{#each Permissions.iterate(Permissions.USERADMIN) as permission}
<label for={permission.value}>
<input type="checkbox" id={permission.value} name="USERADMIN" value={permission.value} data-bits={Permissions.deconstruct(permission.value).join(" ")} onclick={(event) => {
const target = event.target as HTMLInputElement
const container = target.parentElement?.parentElement ?? target
const bits = target.dataset?.bits?.split(" ")
if (!bits) return
if (bits.length > 1) {
for (const bit of bits) {
const affected = container.querySelectorAll(`input[data-bits="${bit}"]`) ?? []
for (const box of affected) {
(box as HTMLInputElement).checked = target.checked
}
}
} else {
const bit = bits[0]
const affected = container.querySelectorAll(`input[data-bits~="${bit}"]`) ?? []
for (const _box of affected) {
const box = _box as HTMLInputElement
const groupBits = box.dataset.bits?.split(" ") ?? [];
const children = groupBits.map(
b => container.querySelector(`input[data-bits="${b}"]`) as HTMLInputElement
);
const allChecked = children.every(cb => cb.checked);
const anyChecked = children.some(cb => cb.checked);
box.indeterminate = (box.indeterminate && anyChecked) || (box.checked && !allChecked && anyChecked)
box.checked = allChecked;
}
}
}} />
{permission.name}
</label>
{/each}
</div>
</td>
</tr>
</tbody>
</table>
<table>
<colgroup>
<col class="leader3" />
@ -132,6 +69,80 @@
</tr>
</tbody>
</table>
{#if data.user?.id == data.loggedInAs.id || Permissions.has(data.loggedInAs.permissions ?? 0, Permissions.USERADMIN.EDIT_PASSWORD)}
<table>
<colgroup>
<col class="leader2" />
<col class="form2" />
</colgroup>
<thead>
<tr><th colspan="2">Berechtigungen</th></tr>
</thead>
<tbody>
<tr>
<td>Benutzerverwaltung</td>
<td>
<div class="permission-selector">
{#each Permissions.iterate(Permissions.USERADMIN) as permission}
<label>
<input
type="checkbox"
id={permission.value}
name="USERADMIN"
value={permission.value}
checked={Permissions.has(data.user.permissions, permission.value)}
disabled={data.user?.id == data.loggedInAs.id}
data-bits={Permissions.deconstruct(permission.value).join(" ")}
onclick={(event) => {
const target = event.target as HTMLInputElement
const container = target.parentElement?.parentElement ?? target
const bits = target.dataset?.bits?.split(" ")
if (!bits) return
if (bits.length > 1) {
for (const bit of bits) {
const affected = container.querySelectorAll(`input[data-bits="${bit}"]`) ?? []
for (const box of affected) {
(box as HTMLInputElement).checked = target.checked
}
}
} else {
const bit = bits[0]
const affected = container.querySelectorAll(`input[data-bits~="${bit}"]`) ?? []
for (const _box of affected) {
const box = _box as HTMLInputElement
const groupBits = box.dataset.bits?.split(" ") ?? [];
const children = groupBits.map(
b => container.querySelector(`input[data-bits="${b}"]`) as HTMLInputElement
);
const allChecked = children.every(cb => cb.checked);
const anyChecked = children.some(cb => cb.checked);
box.indeterminate = (box.indeterminate && anyChecked) || (box.checked && !allChecked && anyChecked)
box.checked = allChecked;
}
}
}} />
{permission.name}
</label>
{/each}
</div>
</td>
</tr>
</tbody>
</table>
{/if}
<button type="submit">Speichern</button>
@ -182,6 +193,10 @@ input[type="text"] {
border-bottom: solid 1px black;
}
label:has(input[type="checkbox"][disabled]) {
color: gray;
}
button {
width: 15%;
margin-left: 85%;