Working on adding functionality for administrators to directly add users to the application
This commit is contained in:
parent
a5211d9483
commit
bc947a14ae
4 changed files with 29 additions and 21 deletions
|
@ -47,10 +47,12 @@ class TopNavigationController {
|
||||||
topNavigation.hide('users');
|
topNavigation.hide('users');
|
||||||
}
|
}
|
||||||
if (api.isLoggedIn()) {
|
if (api.isLoggedIn()) {
|
||||||
topNavigation.hide('register');
|
if (!api.hasPrivilege('users:create:any')) {
|
||||||
|
topNavigation.hide('register');
|
||||||
|
}
|
||||||
topNavigation.hide('login');
|
topNavigation.hide('login');
|
||||||
} else {
|
} else {
|
||||||
if (!api.hasPrivilege('users:create')) {
|
if (!api.hasPrivilege('users:create:self')) {
|
||||||
topNavigation.hide('register');
|
topNavigation.hide('register');
|
||||||
}
|
}
|
||||||
topNavigation.hide('account');
|
topNavigation.hide('account');
|
||||||
|
|
|
@ -10,7 +10,7 @@ const EmptyView = require('../views/empty_view.js');
|
||||||
|
|
||||||
class UserRegistrationController {
|
class UserRegistrationController {
|
||||||
constructor() {
|
constructor() {
|
||||||
if (!api.hasPrivilege('users:create')) {
|
if (!api.hasPrivilege('users:create:self')) {
|
||||||
this._view = new EmptyView();
|
this._view = new EmptyView();
|
||||||
this._view.showError('Registration is closed.');
|
this._view.showError('Registration is closed.');
|
||||||
return;
|
return;
|
||||||
|
@ -30,6 +30,7 @@ class UserRegistrationController {
|
||||||
user.email = e.detail.email;
|
user.email = e.detail.email;
|
||||||
user.password = e.detail.password;
|
user.password = e.detail.password;
|
||||||
user.save().then(() => {
|
user.save().then(() => {
|
||||||
|
// TODO: Support the flow where an admin creates a user. Don't log them out...
|
||||||
api.forget();
|
api.forget();
|
||||||
return api.login(e.detail.name, e.detail.password, false);
|
return api.login(e.detail.name, e.detail.password, false);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
|
|
@ -26,24 +26,29 @@ def get_users(
|
||||||
@rest.routes.post('/users/?')
|
@rest.routes.post('/users/?')
|
||||||
def create_user(
|
def create_user(
|
||||||
ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
|
ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
|
||||||
if config.config['registration_enabled']:
|
if ctx.user.user_id is None:
|
||||||
auth.verify_privilege(ctx.user, 'users:create')
|
auth.verify_privilege(ctx.user, 'users:create:self')
|
||||||
name = ctx.get_param_as_string('name')
|
|
||||||
password = ctx.get_param_as_string('password')
|
|
||||||
email = ctx.get_param_as_string('email', default='')
|
|
||||||
user = users.create_user(name, password, email)
|
|
||||||
if ctx.has_param('rank'):
|
|
||||||
users.update_user_rank(user, ctx.get_param_as_string('rank'), ctx.user)
|
|
||||||
if ctx.has_param('avatarStyle'):
|
|
||||||
users.update_user_avatar(
|
|
||||||
user,
|
|
||||||
ctx.get_param_as_string('avatarStyle'),
|
|
||||||
ctx.get_file('avatar', default=b''))
|
|
||||||
ctx.session.add(user)
|
|
||||||
ctx.session.commit()
|
|
||||||
return _serialize(ctx, user, force_show_email=True)
|
|
||||||
else:
|
else:
|
||||||
raise errors.ValidationError('User Registration Disabled')
|
auth.verify_privilege(ctx.user, 'users:create:any')
|
||||||
|
|
||||||
|
name = ctx.get_param_as_string('name')
|
||||||
|
password = ctx.get_param_as_string('password')
|
||||||
|
email = ctx.get_param_as_string('email', default='')
|
||||||
|
user = users.create_user(name, password, email)
|
||||||
|
if ctx.has_param('rank'):
|
||||||
|
users.update_user_rank(user, ctx.get_param_as_string('rank'), ctx.user)
|
||||||
|
if ctx.has_param('avatarStyle'):
|
||||||
|
users.update_user_avatar(
|
||||||
|
user,
|
||||||
|
ctx.get_param_as_string('avatarStyle'),
|
||||||
|
ctx.get_file('avatar', default=b''))
|
||||||
|
ctx.session.add(user)
|
||||||
|
ctx.session.commit()
|
||||||
|
|
||||||
|
if ctx.user.user_id is not None:
|
||||||
|
user = ctx.user
|
||||||
|
|
||||||
|
return _serialize(ctx, user, force_show_email=True)
|
||||||
|
|
||||||
|
|
||||||
@rest.routes.get('/user/(?P<user_name>[^/]+)/?')
|
@rest.routes.get('/user/(?P<user_name>[^/]+)/?')
|
||||||
|
|
|
@ -6,7 +6,7 @@ from szurubooru.func import users
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def inject_config(config_injector):
|
def inject_config(config_injector):
|
||||||
config_injector({'privileges': {'users:create': 'regular'}})
|
config_injector({'privileges': {'users:create:self': 'regular'}})
|
||||||
|
|
||||||
|
|
||||||
def test_creating_user(user_factory, context_factory, fake_datetime):
|
def test_creating_user(user_factory, context_factory, fake_datetime):
|
||||||
|
|
Loading…
Reference in a new issue