diff options
Diffstat (limited to 'keystone/models/token_model.py')
-rw-r--r-- | keystone/models/token_model.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/keystone/models/token_model.py b/keystone/models/token_model.py index 79791e5dd..7f190286a 100644 --- a/keystone/models/token_model.py +++ b/keystone/models/token_model.py @@ -409,14 +409,16 @@ class TokenModel(object): def _get_application_credential_roles(self): roles = [] app_cred_roles = self.application_credential['roles'] + assignment_list = PROVIDERS.assignment_api.list_role_assignments( + user_id=self.user_id, + project_id=self.project_id, + domain_id=self.domain_id, + effective=True) + user_roles = list(set([x['role_id'] for x in assignment_list])) + for role in app_cred_roles: - try: - r = PROVIDERS.assignment_api.get_grant( - role['id'], user_id=self.user_id, - domain_id=self.domain_id, project_id=self.project_id) - roles.append({'id': r['id'], 'name': r['name']}) - except exception.RoleAssignmentNotFound: - pass + if role['id'] in user_roles: + roles.append({'id': role['id'], 'name': role['name']}) return roles |