From 47f92065905dc50ff7167cef77f2611c2ff3d488 Mon Sep 17 00:00:00 2001 From: "B.Haleblian" Date: Sat, 12 Jan 2019 02:15:50 +0100 Subject: [PATCH] Fix/Add : Identity V3 validate user role HTTP status handling in Project class is now correct: - 204 if head() returns OK (User has Role) --> True - else --> False Add this validate functionality to Identity v3 Proxy Change-Id: I12862b229a462182bd303e8a0b20fb326e6b9bff --- openstack/identity/v3/_proxy.py | 17 +++++++++++++++++ openstack/identity/v3/project.py | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/openstack/identity/v3/_proxy.py b/openstack/identity/v3/_proxy.py index d35a326ff..66ba8dbd9 100644 --- a/openstack/identity/v3/_proxy.py +++ b/openstack/identity/v3/_proxy.py @@ -1148,3 +1148,20 @@ class Proxy(proxy.Proxy): user = self._get_resource(_user.User, user) role = self._get_resource(_role.Role, role) project.unassign_role_from_user(self, user, role) + + def validate_user_has_role(self, project, user, role): + """Validates that a user has a role on a project + + :param project: Either the ID of a project or a + :class:`~openstack.identity.v3.project.Project` + instance. + :param user: Either the ID of a user or a + :class:`~openstack.identity.v3.user.User` instance. + :param role: Either the ID of a role or a + :class:`~openstack.identity.v3.role.Role` instance. + :returns: True if user has role in project + """ + project = self._get_resource(_project.Project, project) + user = self._get_resource(_user.User, user) + role = self._get_resource(_role.Role, role) + return project.validate_user_has_role(self, user, role) diff --git a/openstack/identity/v3/project.py b/openstack/identity/v3/project.py index 5f5a741c2..19fa8dc9d 100644 --- a/openstack/identity/v3/project.py +++ b/openstack/identity/v3/project.py @@ -73,7 +73,7 @@ class Project(resource.Resource, resource.TagMixin): url = utils.urljoin(self.base_path, self.id, 'users', user.id, 'roles', role.id) resp = session.head(url,) - if resp.status_code == 201: + if resp.status_code == 204: return True return False @@ -100,7 +100,7 @@ class Project(resource.Resource, resource.TagMixin): url = utils.urljoin(self.base_path, self.id, 'groups', group.id, 'roles', role.id) resp = session.head(url,) - if resp.status_code == 201: + if resp.status_code == 204: return True return False