From 78efe32b690dabef23caa9f823e263770a50e03d Mon Sep 17 00:00:00 2001
From: Ian Roddis <31021769+iroddis@users.noreply.github.com>
Date: Wed, 24 Jun 2026 22:01:25 -0300
Subject: [PATCH] Adding ACL Modificationf for existing roles
---
app/templates/admin/_role_row.html | 17 +++++++++
app/templates/admin/_role_row_edit.html | 26 +++++++++++++
app/templates/admin/_roles_table.html | 14 +------
app/web/admin.py | 50 ++++++++++++++++++++++++-
4 files changed, 93 insertions(+), 14 deletions(-)
create mode 100644 app/templates/admin/_role_row.html
create mode 100644 app/templates/admin/_role_row_edit.html
diff --git a/app/templates/admin/_role_row.html b/app/templates/admin/_role_row.html
new file mode 100644
index 0000000..2cb0256
--- /dev/null
+++ b/app/templates/admin/_role_row.html
@@ -0,0 +1,17 @@
+
+ | {{ r.id }} |
+ {{ r.name }} |
+ {{ r.description or "" }} |
+ {% for perm in r.permissions %}{{ perm.name }}{% endfor %} |
+
+
+
+ |
+
diff --git a/app/templates/admin/_role_row_edit.html b/app/templates/admin/_role_row_edit.html
new file mode 100644
index 0000000..90a0af7
--- /dev/null
+++ b/app/templates/admin/_role_row_edit.html
@@ -0,0 +1,26 @@
+
+ |
+
+ |
+
diff --git a/app/templates/admin/_roles_table.html b/app/templates/admin/_roles_table.html
index 015c4d2..516812c 100644
--- a/app/templates/admin/_roles_table.html
+++ b/app/templates/admin/_roles_table.html
@@ -5,19 +5,7 @@
{% for r in roles %}
-
- | {{ r.id }} |
- {{ r.name }} |
- {{ r.description or "" }} |
- {% for perm in r.permissions %}{{ perm.name }}{% endfor %} |
-
-
- |
-
+ {% include "admin/_role_row.html" %}
{% endfor %}
diff --git a/app/web/admin.py b/app/web/admin.py
index ca69962..0ab9c65 100644
--- a/app/web/admin.py
+++ b/app/web/admin.py
@@ -197,10 +197,58 @@ async def create_role(
return templates.TemplateResponse(
request,
"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}")
async def delete_role(
role_id: int,