Ftrack: Role names are not case sensitive in ftrack event server status action (#5058)

* statuser is not case sensitive about role names

* safer role check
This commit is contained in:
Jakub Trllo 2023-05-30 13:32:27 +02:00 committed by GitHub
parent a068bd9b05
commit 5fbae39a74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 6 deletions

View file

@ -234,6 +234,10 @@ class BaseAction(BaseHandler):
if not settings_roles:
return default
user_roles = {
role_name.lower()
for role_name in user_roles
}
for role_name in settings_roles:
if role_name.lower() in user_roles:
return True
@ -264,8 +268,15 @@ class BaseAction(BaseHandler):
return user_entity
@classmethod
def get_user_roles_from_event(cls, session, event):
"""Query user entity from event."""
def get_user_roles_from_event(cls, session, event, lower=True):
"""Get user roles based on data in event.
Args:
session (ftrack_api.Session): Prepared ftrack session.
event (ftrack_api.event.Event): Event which is processed.
lower (Optional[bool]): Lower the role names. Default 'True'.
"""
not_set = object()
user_roles = event["data"].get("user_roles", not_set)
@ -273,7 +284,10 @@ class BaseAction(BaseHandler):
user_roles = []
user_entity = cls.get_user_entity_from_event(session, event)
for role in user_entity["user_security_roles"]:
user_roles.append(role["security_role"]["name"].lower())
role_name = role["security_role"]["name"]
if lower:
role_name = role_name.lower()
user_roles.append(role_name)
event["data"]["user_roles"] = user_roles
return user_roles
@ -322,7 +336,8 @@ class BaseAction(BaseHandler):
if not settings.get(self.settings_enabled_key, True):
return False
user_role_list = self.get_user_roles_from_event(session, event)
user_role_list = self.get_user_roles_from_event(
session, event, lower=False)
if not self.roles_check(settings.get("role_list"), user_role_list):
return False
return True

View file

@ -296,9 +296,9 @@ def server_activity_validate_user(event):
if not user_ent:
return False
role_list = ["Pypeclub", "Administrator"]
role_list = {"pypeclub", "administrator"}
for role in user_ent["user_security_roles"]:
if role["security_role"]["name"] in role_list:
if role["security_role"]["name"].lower() in role_list:
return True
return False