summaryrefslogtreecommitdiffstats
path: root/keystone
diff options
context:
space:
mode:
authorDolph Mathews <dolph.mathews@gmail.com>2012-03-25 12:03:26 -0500
committerDolph Mathews <dolph.mathews@gmail.com>2012-03-27 18:55:42 -0700
commit9e4fe654ed3f2fa4040ccbcd0ccc003f56f9bce2 (patch)
treec0b3b59eefc195a3c62101bbc537ec8b0a3155d6 /keystone
parenta9c6fb1d39f84f79f97333f59ef757cfd9dc8fd2 (diff)
downloadkeystone-9e4fe654ed3f2fa4040ccbcd0ccc003f56f9bce2.tar.gz
keystone-9e4fe654ed3f2fa4040ccbcd0ccc003f56f9bce2.tar.xz
keystone-9e4fe654ed3f2fa4040ccbcd0ccc003f56f9bce2.zip
user-role-crud 404 (bug 963056)
user-role-add user-role-remove Change-Id: I1b3cd019d0d110b01ed175822cdd6c9ddb486412
Diffstat (limited to 'keystone')
-rw-r--r--keystone/identity/backends/kvs.py4
-rw-r--r--keystone/identity/backends/sql.py4
-rw-r--r--keystone/identity/core.py14
3 files changed, 21 insertions, 1 deletions
diff --git a/keystone/identity/backends/kvs.py b/keystone/identity/backends/kvs.py
index 95286a9f..55bd8f08 100644
--- a/keystone/identity/backends/kvs.py
+++ b/keystone/identity/backends/kvs.py
@@ -144,6 +144,10 @@ class Identity(kvs.Base, identity.Driver):
if not metadata_ref:
metadata_ref = {}
roles = set(metadata_ref.get('roles', []))
+ if role_id not in roles:
+ msg = 'Cannot remove role that has not been granted, %s' % role_id
+ raise exception.RoleNotFound(message=msg)
+
roles.remove(role_id)
metadata_ref['roles'] = list(roles)
self.update_metadata(user_id, tenant_id, metadata_ref)
diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py
index 00dedcba..443ddd3b 100644
--- a/keystone/identity/backends/sql.py
+++ b/keystone/identity/backends/sql.py
@@ -286,6 +286,10 @@ class Identity(sql.Base, identity.Driver):
is_new = True
metadata_ref = {}
roles = set(metadata_ref.get('roles', []))
+ if role_id not in roles:
+ msg = 'Cannot remove role that has not been granted, %s' % role_id
+ raise exception.RoleNotFound(message=msg)
+
roles.remove(role_id)
metadata_ref['roles'] = list(roles)
if not is_new:
diff --git a/keystone/identity/core.py b/keystone/identity/core.py
index c2a1041d..ee225264 100644
--- a/keystone/identity/core.py
+++ b/keystone/identity/core.py
@@ -497,6 +497,12 @@ class RoleController(wsgi.Application):
if tenant_id is None:
raise exception.NotImplemented(message='User roles not supported: '
'tenant_id required')
+ if self.identity_api.get_user(context, user_id) is None:
+ raise exception.UserNotFound(user_id=user_id)
+ if self.identity_api.get_tenant(context, tenant_id) is None:
+ raise exception.TenantNotFound(tenant_id=tenant_id)
+ if self.identity_api.get_role(context, role_id) is None:
+ raise exception.RoleNotFound(role_id=role_id)
# This still has the weird legacy semantics that adding a role to
# a user also adds them to a tenant
@@ -517,9 +523,15 @@ class RoleController(wsgi.Application):
if tenant_id is None:
raise exception.NotImplemented(message='User roles not supported: '
'tenant_id required')
+ if self.identity_api.get_user(context, user_id) is None:
+ raise exception.UserNotFound(user_id=user_id)
+ if self.identity_api.get_tenant(context, tenant_id) is None:
+ raise exception.TenantNotFound(tenant_id=tenant_id)
+ if self.identity_api.get_role(context, role_id) is None:
+ raise exception.RoleNotFound(role_id=role_id)
# This still has the weird legacy semantics that adding a role to
- # a user also adds them to a tenant
+ # a user also adds them to a tenant, so we must follow up on that
self.identity_api.remove_role_from_user_and_tenant(
context, user_id, tenant_id, role_id)
roles = self.identity_api.get_roles_for_user_and_tenant(