Adding ACL Modificationf for existing roles
This commit is contained in:
1 parent
35e8a61b1d
commit
78efe32b69
4 files changed
+93
-14
No files matched your search
@@ -0,0 +1,17 @@
|
|||||||
|
<tr id="role-{{ r.id }}">
|
||||||
|
<td>{{ r.id }}</td>
|
||||||
|
<td>{{ r.name }}</td>
|
||||||
|
<td>{{ r.description or "" }}</td>
|
||||||
|
<td>{% for perm in r.permissions %}<span class="tag">{{ perm.name }}</span>{% endfor %}</td>
|
||||||
|
<td class="row-actions">
|
||||||
|
<button class="btn btn-ghost"
|
||||||
|
hx-get="/admin/roles/{{ r.id }}/edit"
|
||||||
|
hx-target="#role-{{ r.id }}"
|
||||||
|
hx-swap="outerHTML">Edit</button>
|
||||||
|
<button class="btn btn-danger"
|
||||||
|
hx-delete="/admin/roles/{{ r.id }}"
|
||||||
|
hx-target="#role-{{ r.id }}"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
hx-confirm="Delete role {{ r.name }}?">Delete</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<tr id="role-{{ r.id }}">
|
||||||
|
<td colspan="5">
|
||||||
|
<form hx-post="/admin/roles/{{ r.id }}"
|
||||||
|
hx-target="#role-{{ r.id }}"
|
||||||
|
hx-swap="outerHTML"
|
||||||
|
class="inline-edit">
|
||||||
|
<span class="muted">#{{ r.id }} · {{ r.name }}</span>
|
||||||
|
<fieldset class="roles-field">
|
||||||
|
<legend>Permissions</legend>
|
||||||
|
{% for perm in permissions %}
|
||||||
|
<label class="check">
|
||||||
|
<input type="checkbox" name="permission_ids" value="{{ perm.id }}"
|
||||||
|
{{ "checked" if perm in r.permissions }}> {{ perm.name }}
|
||||||
|
</label>
|
||||||
|
{% endfor %}
|
||||||
|
</fieldset>
|
||||||
|
<div class="row-actions">
|
||||||
|
<button type="submit" class="btn btn-primary">Save</button>
|
||||||
|
<button type="button" class="btn btn-ghost"
|
||||||
|
hx-get="/admin/roles/{{ r.id }}/row"
|
||||||
|
hx-target="#role-{{ r.id }}"
|
||||||
|
hx-swap="outerHTML">Cancel</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
@@ -5,19 +5,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for r in roles %}
|
{% for r in roles %}
|
||||||
<tr id="role-{{ r.id }}">
|
{% include "admin/_role_row.html" %}
|
||||||
<td>{{ r.id }}</td>
|
|
||||||
<td>{{ r.name }}</td>
|
|
||||||
<td>{{ r.description or "" }}</td>
|
|
||||||
<td>{% for perm in r.permissions %}<span class="tag">{{ perm.name }}</span>{% endfor %}</td>
|
|
||||||
<td class="row-actions">
|
|
||||||
<button class="btn btn-danger"
|
|
||||||
hx-delete="/admin/roles/{{ r.id }}"
|
|
||||||
hx-target="#role-{{ r.id }}"
|
|
||||||
hx-swap="outerHTML"
|
|
||||||
hx-confirm="Delete role {{ r.name }}?">Delete</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
+49
-1
@@ -197,10 +197,58 @@ async def create_role(
|
|||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
"admin/_roles_table.html",
|
"admin/_roles_table.html",
|
||||||
{"roles": await role_crud.list_roles(db)},
|
{
|
||||||
|
"roles": await role_crud.list_roles(db),
|
||||||
|
"permissions": await role_crud.list_permissions(db),
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/roles/{role_id}/edit", response_class=HTMLResponse)
|
||||||
|
async def edit_role_row(
|
||||||
|
request: Request,
|
||||||
|
role_id: int,
|
||||||
|
db: AsyncSession = Depends(get_db),
|
||||||
|
_: User = Depends(web_require("roles:write")),
|
||||||
|
):
|
||||||
|
role = await role_crud.get(db, role_id)
|
||||||
|
if role is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Role not found")
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
request,
|
||||||
|
"admin/_role_row_edit.html",
|
||||||
|
{"r": role, "permissions": await role_crud.list_permissions(db)},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/roles/{role_id}/row", response_class=HTMLResponse)
|
||||||
|
async def role_row(
|
||||||
|
request: Request,
|
||||||
|
role_id: int,
|
||||||
|
db: AsyncSession = Depends(get_db),
|
||||||
|
_: User = Depends(web_require("roles:read")),
|
||||||
|
):
|
||||||
|
role = await role_crud.get(db, role_id)
|
||||||
|
if role is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Role not found")
|
||||||
|
return templates.TemplateResponse(request, "admin/_role_row.html", {"r": role})
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/roles/{role_id}", response_class=HTMLResponse)
|
||||||
|
async def update_role(
|
||||||
|
request: Request,
|
||||||
|
role_id: int,
|
||||||
|
permission_ids: list[int] = Form(default=[]),
|
||||||
|
db: AsyncSession = Depends(get_db),
|
||||||
|
_: User = Depends(web_require("roles:write")),
|
||||||
|
):
|
||||||
|
role = await role_crud.get(db, role_id)
|
||||||
|
if role is None:
|
||||||
|
raise HTTPException(status_code=404, detail="Role not found")
|
||||||
|
await role_crud.update(db, role, {"permission_ids": permission_ids})
|
||||||
|
return templates.TemplateResponse(request, "admin/_role_row.html", {"r": role})
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/roles/{role_id}")
|
@router.delete("/roles/{role_id}")
|
||||||
async def delete_role(
|
async def delete_role(
|
||||||
role_id: int,
|
role_id: int,
|
||||||
|
|||||||
Reference in new issue
Block a user