api: export all role attributes with user info (#8397)
This commit is contained in:
parent
558c4df65e
commit
a58fcf4cae
|
@ -202,6 +202,22 @@ def test_sign_url(local_user):
|
|||
url = signed_url[len('http://example.net'):]
|
||||
output = get_app(pub).get(url, status=403)
|
||||
|
||||
def test_get_user(local_user):
|
||||
Role.wipe()
|
||||
role = Role(name='Foo bar')
|
||||
role.store()
|
||||
local_user.roles = [role.id]
|
||||
local_user.store()
|
||||
signed_url = sign_url(
|
||||
'http://example.net/api/user/?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email),
|
||||
'1234'
|
||||
)
|
||||
url = signed_url[len('http://example.net'):]
|
||||
output = get_app(pub).get(url)
|
||||
assert output.json['user_display_name'] == u'Jean Darmette'
|
||||
assert [x['name'] for x in output.json['user_roles']] == ['Foo bar']
|
||||
assert [x['slug'] for x in output.json['user_roles']] == ['foo-bar']
|
||||
|
||||
def test_get_user_compat_endpoint(local_user):
|
||||
signed_url = sign_url(
|
||||
'http://example.net/user?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email),
|
||||
|
|
13
wcs/api.py
13
wcs/api.py
|
@ -360,9 +360,8 @@ class ApiUserDirectory(Directory):
|
|||
raise AccessForbiddenError('no user specified')
|
||||
user_info = user.get_substitution_variables(prefix='')
|
||||
del user_info['user']
|
||||
user_info['user_roles'] = []
|
||||
for role_id in user.roles or []:
|
||||
user_info['user_roles'].append(Role.get(role_id).name)
|
||||
user_info['user_roles'] = [
|
||||
Role.get(x).get_json_export_dict() for x in user.roles or []]
|
||||
return json.dumps(user_info)
|
||||
|
||||
def get_user_forms(self, user):
|
||||
|
@ -505,12 +504,6 @@ class ApiDirectory(Directory):
|
|||
list_roles = []
|
||||
charset = get_publisher().site_charset
|
||||
for role in Role.select():
|
||||
list_roles.append({'text': unicode(role.name, charset),
|
||||
'allows_backoffice_access': role.allows_backoffice_access,
|
||||
'emails': [unicode(email, charset) for email in role.emails or []],
|
||||
'details': unicode(role.details or '', charset),
|
||||
'emails_to_members': role.emails_to_members,
|
||||
'slug': unicode(role.slug, charset),
|
||||
'id': role.id})
|
||||
list_roles.append(role.get_json_export_dict())
|
||||
get_response().set_content_type('application/json')
|
||||
return json.dumps({'data': list_roles})
|
||||
|
|
12
wcs/roles.py
12
wcs/roles.py
|
@ -78,6 +78,18 @@ class Role(StorableObject):
|
|||
data[prefix + 'emails'] = ', '.join(self.emails)
|
||||
return data
|
||||
|
||||
def get_json_export_dict(self):
|
||||
charset = get_publisher().site_charset
|
||||
return {
|
||||
'name': unicode(self.name, charset),
|
||||
'text': unicode(self.name, charset), # generic key
|
||||
'allows_backoffice_access': self.allows_backoffice_access,
|
||||
'emails': [unicode(email, charset) for email in self.emails or []],
|
||||
'details': unicode(self.details or '', charset),
|
||||
'emails_to_members': self.emails_to_members,
|
||||
'slug': unicode(self.slug, charset),
|
||||
'id': self.id}
|
||||
|
||||
|
||||
def logged_users_role():
|
||||
volatile_role = Role.volatile()
|
||||
|
|
Loading…
Reference in New Issue