From 8d25673a2256e1fb0a45d62e582865bcfd84ec35 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 10 Jun 2024 12:34:12 -0500 Subject: Implement "Resource Role Page" Show the page, providing all UI elements necessary, even if the elements themselves are not active. --- gn2/wqflask/oauth2/resources.py | 35 ++++++++ .../templates/oauth2/view-resource-role.html | 98 ++++++++++++++++++++++ gn2/wqflask/templates/oauth2/view-resource.html | 6 +- 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 gn2/wqflask/templates/oauth2/view-resource-role.html diff --git a/gn2/wqflask/oauth2/resources.py b/gn2/wqflask/oauth2/resources.py index 42fdae37..70b49375 100644 --- a/gn2/wqflask/oauth2/resources.py +++ b/gn2/wqflask/oauth2/resources.py @@ -296,3 +296,38 @@ def edit_resource(resource_id: uuid.UUID): def delete_resource(resource_id: uuid.UUID): """Delete the given resource.""" return "WOULD DELETE THE GIVEN RESOURCE" + +@resources.route("//role/", methods=["GET"]) +@require_oauth2 +def view_resource_role(resource_id: uuid.UUID, role_id: uuid.UUID): + """View resource role page.""" + def __render_template__(**kwargs): + return render_ui("oauth2/view-resource-role.html", **kwargs) + + def __fetch_all_roles__(resource, role): + return oauth2_get(f"auth/resource/{resource_id}/roles").either( + lambda error: __render_template__( + all_roles_error=process_error(error)), + lambda all_roles: __render_template__( + resource=resource, + role=role, + unassigned_privileges=[ + priv for role in all_roles + for priv in role["privileges"] + if priv not in role["privileges"] + ])) + + def __fetch_resource_role__(resource): + return oauth2_get( + f"auth/resource/{resource_id}/role/{role_id}").either( + lambda error: __render_template__( + resource=resource, + role_id=role_id, + role_error=process_error(error)), + lambda role: __fetch_all_roles__(resource, role)) + + return oauth2_get( + f"auth/resource/view/{resource_id}").either( + lambda error: __render_template__( + resource_error=process_error(error)), + lambda resource: __fetch_resource_role__(resource=resource)) diff --git a/gn2/wqflask/templates/oauth2/view-resource-role.html b/gn2/wqflask/templates/oauth2/view-resource-role.html new file mode 100644 index 00000000..05df41d6 --- /dev/null +++ b/gn2/wqflask/templates/oauth2/view-resource-role.html @@ -0,0 +1,98 @@ +{%extends "base.html"%} +{%from "oauth2/profile_nav.html" import profile_nav%} +{%from "oauth2/display_error.html" import display_error%} +{%block title%}View User{%endblock%} +{%block content%} + +{%macro unassign_button(resource_id, role_id, privilege_id)%} + +{%endmacro%} + +
+ {{profile_nav(uipages, user_privileges)}} + {%if resource_error is defined%} + {{display_error("Resource", resource_error)}} + {%else%} +

Role for Resource '{{resource.resource_name}}'

+ {%if role_error is defined%} + {{display_error("Role", role_error)}} + {%else%} + + + + + + + + + + + + {%for priv in role.privileges%} + {%if loop.index0 == 0%} + + + + + + {%else%} + + + + + {%endif%} + {%else%} + + + + {%endfor%} + +
Role '{{role.role_name}}' for resource '{{resource.resource_name}}'
Role NamePrivilegeAction
+ {{role.role_name}}{{priv.privilege_description}}{{unassign_button(resource.resource_id, role.role_id, priv.privilege_id)}}
{{priv.privilege_description}}{{unassign_button(resource.resource_id, role.role_id, priv.privilege_id)}}
+

+ {{title}}: + +   + This role has no privileges. +

+
+ +
+ + + {%if unassigned_privileges | length == 0%} +

+ {{title}}: + +   + There are no more privileges left to assign. +

+ {%else%} +
+ Select privileges to assign to this role + {%for priv in unassigned_privileges%} +
+ +
+ {%endfor%} +
+ + + {%endif%} +
+ {%endif%} + {%endif%} +
+ +{%endblock%} diff --git a/gn2/wqflask/templates/oauth2/view-resource.html b/gn2/wqflask/templates/oauth2/view-resource.html index 451bfbd7..25cac6ff 100644 --- a/gn2/wqflask/templates/oauth2/view-resource.html +++ b/gn2/wqflask/templates/oauth2/view-resource.html @@ -237,7 +237,11 @@

Available Resource Roles

{%for role in resource_roles%} - + {{role.role_name}} {%endfor%} -- cgit v1.2.3