checking for permission to display permissions
This commit is contained in:
parent
a46c302be8
commit
1049b04968
|
|
@ -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%;
|
||||
|
|
|
|||
Loading…
Reference in New Issue