Polish team role and login UI
This commit is contained in:
@@ -105,6 +105,11 @@ public static class AdminTeamEndpoints
|
|||||||
return validationError;
|
return validationError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (normalizedRole == AdminRoles.Creator)
|
||||||
|
{
|
||||||
|
return Results.Json(new { message = "Creator-Konten werden fest vorkonfiguriert und können nicht manuell angelegt werden." }, statusCode: StatusCodes.Status403Forbidden);
|
||||||
|
}
|
||||||
|
|
||||||
if (AdminRoles.IsPrivilegedFullControlRole(normalizedRole) && !AdminRoles.CanResetTeamPasswords(session.Role))
|
if (AdminRoles.IsPrivilegedFullControlRole(normalizedRole) && !AdminRoles.CanResetTeamPasswords(session.Role))
|
||||||
{
|
{
|
||||||
return Results.Json(new { message = "Owner- und Creator-Konten können nur von Owner oder Creator angelegt werden." }, statusCode: StatusCodes.Status403Forbidden);
|
return Results.Json(new { message = "Owner- und Creator-Konten können nur von Owner oder Creator angelegt werden." }, statusCode: StatusCodes.Status403Forbidden);
|
||||||
@@ -185,6 +190,11 @@ public static class AdminTeamEndpoints
|
|||||||
return Results.Conflict(new { message = "Dieser Login existiert bereits." });
|
return Results.Conflict(new { message = "Dieser Login existiert bereits." });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (normalizedRole == AdminRoles.Creator && member.Role != AdminRoles.Creator)
|
||||||
|
{
|
||||||
|
return Results.Json(new { message = "Creator-Konten werden fest vorkonfiguriert und können nicht manuell zugewiesen werden." }, statusCode: StatusCodes.Status403Forbidden);
|
||||||
|
}
|
||||||
|
|
||||||
if ((AdminRoles.IsPrivilegedFullControlRole(member.Role) || AdminRoles.IsPrivilegedFullControlRole(normalizedRole)) && !AdminRoles.CanResetTeamPasswords(session.Role))
|
if ((AdminRoles.IsPrivilegedFullControlRole(member.Role) || AdminRoles.IsPrivilegedFullControlRole(normalizedRole)) && !AdminRoles.CanResetTeamPasswords(session.Role))
|
||||||
{
|
{
|
||||||
return Results.Json(new { message = "Owner- und Creator-Konten können nur von Owner oder Creator bearbeitet werden." }, statusCode: StatusCodes.Status403Forbidden);
|
return Results.Json(new { message = "Owner- und Creator-Konten können nur von Owner oder Creator bearbeitet werden." }, statusCode: StatusCodes.Status403Forbidden);
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ export function useAdminTeamManager() {
|
|||||||
const pendingPasswordChanges = computed(() => members.value.filter((member) => member.mustChangePassword).length)
|
const pendingPasswordChanges = computed(() => members.value.filter((member) => member.mustChangePassword).length)
|
||||||
const roleOptions = computed(() => roles.value.map((role) => ({ value: role.key, label: role.label })))
|
const roleOptions = computed(() => roles.value.map((role) => ({ value: role.key, label: role.label })))
|
||||||
const selectedMember = computed(() => members.value.find((member) => member.id === editingMemberId.value) ?? null)
|
const selectedMember = computed(() => members.value.find((member) => member.id === editingMemberId.value) ?? null)
|
||||||
|
const assignableRoleOptions = computed(() => roleOptions.value.filter((role) =>
|
||||||
|
role.value !== 'creator' || selectedMember.value?.role === 'creator',
|
||||||
|
))
|
||||||
const hasRoleChanges = computed(() =>
|
const hasRoleChanges = computed(() =>
|
||||||
Boolean(savedRoleSnapshot.value) && JSON.stringify(rolePermissionDrafts.value) !== savedRoleSnapshot.value,
|
Boolean(savedRoleSnapshot.value) && JSON.stringify(rolePermissionDrafts.value) !== savedRoleSnapshot.value,
|
||||||
)
|
)
|
||||||
@@ -260,6 +263,7 @@ export function useAdminTeamManager() {
|
|||||||
activeMembers,
|
activeMembers,
|
||||||
pendingPasswordChanges,
|
pendingPasswordChanges,
|
||||||
roleOptions,
|
roleOptions,
|
||||||
|
assignableRoleOptions,
|
||||||
hasRoleChanges,
|
hasRoleChanges,
|
||||||
loadTeam,
|
loadTeam,
|
||||||
startCreateMember,
|
startCreateMember,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
login: 'jayuhime_admin',
|
login: '',
|
||||||
password: '',
|
password: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const {
|
|||||||
selectedMember,
|
selectedMember,
|
||||||
activeMembers,
|
activeMembers,
|
||||||
pendingPasswordChanges,
|
pendingPasswordChanges,
|
||||||
roleOptions,
|
assignableRoleOptions,
|
||||||
hasRoleChanges,
|
hasRoleChanges,
|
||||||
startCreateMember,
|
startCreateMember,
|
||||||
startEditMember,
|
startEditMember,
|
||||||
@@ -343,7 +343,7 @@ async function changeOwnPassword() {
|
|||||||
</div>
|
</div>
|
||||||
<Button type="button" :disabled="saving || !hasRoleChanges" @click="saveRolePermissions">
|
<Button type="button" :disabled="saving || !hasRoleChanges" @click="saveRolePermissions">
|
||||||
<Save class="mr-2 h-4 w-4" />
|
<Save class="mr-2 h-4 w-4" />
|
||||||
Speicherbutton
|
Speichern
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -433,7 +433,7 @@ async function changeOwnPassword() {
|
|||||||
v-model="memberForm.role"
|
v-model="memberForm.role"
|
||||||
class="h-12 rounded-2xl border border-violet-100 bg-white px-4 text-base font-bold text-slate-900 outline-none transition focus:border-violet-300 focus:ring-4 focus:ring-violet-100"
|
class="h-12 rounded-2xl border border-violet-100 bg-white px-4 text-base font-bold text-slate-900 outline-none transition focus:border-violet-300 focus:ring-4 focus:ring-violet-100"
|
||||||
>
|
>
|
||||||
<option v-for="role in roleOptions" :key="role.value" :value="role.value">
|
<option v-for="role in assignableRoleOptions" :key="role.value" :value="role.value">
|
||||||
{{ role.label }}
|
{{ role.label }}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
Reference in New Issue
Block a user