Skip to content

Commit

Permalink
Create users if not found.
Browse files Browse the repository at this point in the history
  • Loading branch information
Bogdan Kyryliuk committed Dec 5, 2016
1 parent 09d597f commit 232f2b8
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 11 deletions.
29 changes: 23 additions & 6 deletions superset/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1139,16 +1139,33 @@ class Superset(BaseSupersetView):
def update_role(self):
"""Assigns a list of found users to the given role."""
data = request.get_json(force=True)
usernames = data['usernames']
users_data = data['users']
role_name = data['role_name']
role = sm.find_role(role_name)
role.user = []
for username in usernames:
user = sm.find_user(username=username)
if user:
created_users = []
granted_users = []
for user_data in users_data:
user = sm.find_user(username=user_data['username'])
if not user and user_data['username']:
sm.add_user(
username=user_data['username'],
first_name=user_data['first_name'],
last_name=user_data['last_name'],
email=user_data['email'],
role=role,
)
user = sm.find_user(username=user_data['username'])
created_users.append(user.username)
else:
role.user.append(user)
db.session.commit()
return Response(status=201)
granted_users.append(user.username)
sm.get_session.commit()
return Response(json.dumps({
'role': role_name,
'created_users': created_users,
'granted_users': granted_users,
}), status=201)

@has_access_api
@expose("/override_role_permissions/", methods=['POST'])
Expand Down
37 changes: 32 additions & 5 deletions tests/access_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,12 @@ def test_update_role_do_not_exist(self):
self.get_resp(
'/superset/update_role/',
data=json.dumps({
'usernames': ['gamma'],
'users': [{
'username': 'gamma',
'first_name': 'Gamma',
'last_name': 'Gamma',
'email': 'gamma@superset.com'
}],
'role_name': update_role_str,
})
)
Expand All @@ -370,7 +375,12 @@ def test_update_role(self):
resp = self.client.post(
'/superset/update_role/',
data=json.dumps({
'usernames': ['gamma'],
'users': [{
'username': 'gamma',
'first_name': 'Gamma',
'last_name': 'Gamma',
'email': 'gamma@superset.com'
}],
'role_name': update_role_str
}),
follow_redirects=True
Expand All @@ -383,17 +393,34 @@ def test_update_role(self):
resp = self.client.post(
'/superset/update_role/',
data=json.dumps({
'usernames': ['alpha', 'unknown'],
'users': [{
'username': 'alpha',
'first_name': 'Alpha',
'last_name': 'Alpha',
'email': 'alpha@superset.com'
}, {
'username': 'unknown',
'first_name': 'Unknown1',
'last_name': 'Unknown2',
'email': 'unknown@superset.com'
}],
'role_name': update_role_str
}),
follow_redirects=True
)
self.assertEquals(resp.status_code, 201)
update_role = sm.find_role(update_role_str)
self.assertEquals(
update_role.user, [sm.find_user(username='alpha')])

update_role.user, [
sm.find_user(username='alpha'),
sm.find_user(username='unknown'),
])
unknown = sm.find_user(username='unknown')
self.assertEquals('Unknown2', unknown.last_name)
self.assertEquals('Unknown1', unknown.first_name)
self.assertEquals('unknown@superset.com', unknown.email)
db.session.delete(update_role)
db.session.delete(unknown)
db.session.commit()


Expand Down

0 comments on commit 232f2b8

Please sign in to comment.