Add user_is_protected()
method to core View class
also, don't allow "protected" users to change their own password
This commit is contained in:
parent
77fa2a78d4
commit
746db72046
|
@ -172,6 +172,10 @@ class AuthenticationView(View):
|
||||||
if not self.request.user:
|
if not self.request.user:
|
||||||
return self.redirect(self.request.route_url('home'))
|
return self.redirect(self.request.route_url('home'))
|
||||||
|
|
||||||
|
if self.user_is_protected(self.request.user):
|
||||||
|
self.request.session.flash("Cannot change password for user: {}".format(self.request.user))
|
||||||
|
return self.redirect(self.request.get_referrer())
|
||||||
|
|
||||||
use_buefy = self.get_use_buefy()
|
use_buefy = self.get_use_buefy()
|
||||||
schema = ChangePassword().bind(user=self.request.user)
|
schema = ChangePassword().bind(user=self.request.user)
|
||||||
form = forms.Form(schema=schema, request=self.request, use_buefy=use_buefy)
|
form = forms.Form(schema=schema, request=self.request, use_buefy=use_buefy)
|
||||||
|
|
|
@ -42,7 +42,7 @@ from tailbone.db import Session
|
||||||
from tailbone.auth import logout_user
|
from tailbone.auth import logout_user
|
||||||
from tailbone.progress import SessionProgress
|
from tailbone.progress import SessionProgress
|
||||||
from tailbone.util import should_use_buefy
|
from tailbone.util import should_use_buefy
|
||||||
from tailbone.config import legacy_mobile_enabled
|
from tailbone.config import legacy_mobile_enabled, protected_usernames
|
||||||
|
|
||||||
|
|
||||||
class View(object):
|
class View(object):
|
||||||
|
@ -110,6 +110,20 @@ class View(object):
|
||||||
if uuid:
|
if uuid:
|
||||||
return Session.query(model.User).get(uuid)
|
return Session.query(model.User).get(uuid)
|
||||||
|
|
||||||
|
def user_is_protected(self, user):
|
||||||
|
"""
|
||||||
|
This logic will consult the settings for a list of "protected"
|
||||||
|
usernames, which should require root privileges to edit. If the given
|
||||||
|
``user`` object is represented in this list, it is considered to be
|
||||||
|
protected and this method will return ``True``; otherwise it returns
|
||||||
|
``False``.
|
||||||
|
"""
|
||||||
|
if not hasattr(self, 'protected_usernames'):
|
||||||
|
self.protected_usernames = protected_usernames(self.rattail_config)
|
||||||
|
if self.protected_usernames and user.username in self.protected_usernames:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def redirect(self, url, **kwargs):
|
def redirect(self, url, **kwargs):
|
||||||
"""
|
"""
|
||||||
Convenience method to return a HTTP 302 response.
|
Convenience method to return a HTTP 302 response.
|
||||||
|
|
|
@ -42,7 +42,6 @@ from tailbone import forms
|
||||||
from tailbone.db import Session
|
from tailbone.db import Session
|
||||||
from tailbone.views import MasterView
|
from tailbone.views import MasterView
|
||||||
from tailbone.views.principal import PrincipalMasterView, PermissionsRenderer
|
from tailbone.views.principal import PrincipalMasterView, PermissionsRenderer
|
||||||
from tailbone.config import protected_usernames
|
|
||||||
|
|
||||||
|
|
||||||
class UsersView(PrincipalMasterView):
|
class UsersView(PrincipalMasterView):
|
||||||
|
@ -154,23 +153,6 @@ class UsersView(PrincipalMasterView):
|
||||||
return True
|
return True
|
||||||
return not self.user_is_protected(user)
|
return not self.user_is_protected(user)
|
||||||
|
|
||||||
def user_is_protected(self, user):
|
|
||||||
"""
|
|
||||||
This logic will consult the settings, for a list of "protected"
|
|
||||||
usernames, which should require root privileges to edit. If no setting
|
|
||||||
is found, or the given ``user`` is not represented in the setting, then
|
|
||||||
edit is allowed.
|
|
||||||
|
|
||||||
But if there is a setting, and the ``user`` is represented in it, then
|
|
||||||
this method will return ``True`` only if the "current" app user is
|
|
||||||
"root", otherwise will return ``False``.
|
|
||||||
"""
|
|
||||||
if not hasattr(self, 'protected_usernames'):
|
|
||||||
self.protected_usernames = protected_usernames(self.rattail_config)
|
|
||||||
if self.protected_usernames and user.username in self.protected_usernames:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def unique_username(self, node, value):
|
def unique_username(self, node, value):
|
||||||
query = self.Session.query(model.User)\
|
query = self.Session.query(model.User)\
|
||||||
.filter(model.User.username == value)
|
.filter(model.User.username == value)
|
||||||
|
|
Loading…
Reference in a new issue