diff --git a/app.py b/app.py index 69c80c8..3bbb5f0 100644 --- a/app.py +++ b/app.py @@ -198,6 +198,22 @@ def get_current_user(request): return None +def get_user_namespace_role(request): + user = request.user + namespace = request.namespace + if not user or not namespace: + return None + s = request.dbsession + association = s.query(NamespaceUserAssociation).filter( + NamespaceUserAssociation.user_id == user.id, + NamespaceUserAssociation.namespace_id == namespace.id + ).first() + if association: + return association.role + else: + return None + + def uuid_to_short_id(u): """Encode UUID to a URL-safe base64 string without padding.""" return base64.urlsafe_b64encode(u.bytes).decode("ascii").rstrip("=") @@ -793,9 +809,6 @@ def manage_namespace_view(request): .all() ) - # Determine if the current user is an owner - request.user_is_owner = True # Since owner_required decorator is used - return { "request": request, "namespace": namespace, @@ -1255,17 +1268,16 @@ def main(global_config=None, **settings): # Register with zope.sqlalchemy register(DBSession) - # Add user to all requests - config.add_request_method(callable=get_current_user, name="user", reify=True) - # Provide dbsession to requests def dbsession(request): return DBSession config.add_request_method(dbsession, "dbsession", reify=True) - # Add namespace to requests + # Add user, namespace, user_namespace_role to requests + config.add_request_method(get_current_user, "user", reify=True) config.add_request_method(get_namespace, "namespace", reify=True) + config.add_request_method(get_user_namespace_role, 'user_namespace_role', reify=True) # Add namespace_dbsession to requests if namespace is set config.add_request_method( diff --git a/templates/manage_namespace.html.j2 b/templates/manage_namespace.html.j2 index 65a2908..56aa3a9 100644 --- a/templates/manage_namespace.html.j2 +++ b/templates/manage_namespace.html.j2 @@ -14,12 +14,15 @@ + +{% if request.user_namespace_role == 'owner' %} +