User user id, not user name, for all user operations

This commit is contained in:
Gina Häußge 2015-09-11 08:34:05 +02:00
parent 2efc5c4fdb
commit 7021b9fe89
2 changed files with 24 additions and 22 deletions

View file

@ -82,7 +82,7 @@ def on_identity_loaded(sender, identity):
if user is None: if user is None:
return return
identity.provides.add(UserNeed(user.get_name())) identity.provides.add(UserNeed(user.get_id()))
if user.is_user(): if user.is_user():
identity.provides.add(RoleNeed("user")) identity.provides.add(RoleNeed("user"))
if user.is_admin(): if user.is_admin():
@ -99,9 +99,9 @@ def load_user(id):
if userManager is not None: if userManager is not None:
if sessionid: if sessionid:
return userManager.findUser(username=id, session=sessionid) return userManager.findUser(userid=id, session=sessionid)
else: else:
return userManager.findUser(username=id) return userManager.findUser(userid=id)
return users.DummyUser() return users.DummyUser()

View file

@ -23,7 +23,7 @@ class UserManager(object):
def __init__(self): def __init__(self):
self._logger = logging.getLogger(__name__) self._logger = logging.getLogger(__name__)
self._session_users_by_session = dict() self._session_users_by_session = dict()
self._session_users_by_username = dict() self._session_users_by_userid = dict()
def login_user(self, user): def login_user(self, user):
self._cleanup_sessions() self._cleanup_sessions()
@ -42,9 +42,10 @@ class UserManager(object):
self._session_users_by_session[user.get_session()] = user self._session_users_by_session[user.get_session()] = user
if not user.get_name() in self._session_users_by_username: userid = user.get_id()
self._session_users_by_username[user.get_name()] = [] if not userid in self._session_users_by_userid:
self._session_users_by_username[user.get_name()].append(user) self._session_users_by_userid[userid] = []
self._session_users_by_userid[userid].append(user)
self._logger.debug("Logged in user: %r" % user) self._logger.debug("Logged in user: %r" % user)
@ -60,11 +61,12 @@ class UserManager(object):
if not isinstance(user, SessionUser): if not isinstance(user, SessionUser):
return return
if user.get_name() in self._session_users_by_username: userid = user.get_id()
users_by_username = self._session_users_by_username[user.get_name()] if userid in self._session_users_by_userid:
for u in users_by_username: users_by_userid = self._session_users_by_userid[userid]
for u in users_by_userid:
if u.get_session() == user.get_session(): if u.get_session() == user.get_session():
users_by_username.remove(u) users_by_userid.remove(u)
break break
if user.get_session() in self._session_users_by_session: if user.get_session() in self._session_users_by_session:
@ -145,18 +147,18 @@ class UserManager(object):
pass pass
def removeUser(self, username): def removeUser(self, username):
if username in self._session_users_by_username: if username in self._session_users_by_userid:
users = self._session_users_by_username[username] users = self._session_users_by_userid[username]
sessions = [user.get_session() for user in users if isinstance(user, SessionUser)] sessions = [user.get_session() for user in users if isinstance(user, SessionUser)]
for session in sessions: for session in sessions:
if session in self._session_users_by_session: if session in self._session_users_by_session:
del self._session_users_by_session[session] del self._session_users_by_session[session]
del self._session_users_by_username[username] del self._session_users_by_userid[username]
def findUser(self, username=None, session=None): def findUser(self, userid=None, session=None):
if session is not None and session in self._session_users_by_session: if session is not None and session in self._session_users_by_session:
user = self._session_users_by_session[session] user = self._session_users_by_session[session]
if username is None or username == user.get_id(): if userid is None or userid == user.get_id():
return user return user
return None return None
@ -351,16 +353,16 @@ class FilebasedUserManager(UserManager):
self._dirty = True self._dirty = True
self._save() self._save()
def findUser(self, username=None, apikey=None, session=None): def findUser(self, userid=None, apikey=None, session=None):
user = UserManager.findUser(self, username=username, session=session) user = UserManager.findUser(self, userid=userid, session=session)
if user is not None: if user is not None:
return user return user
if username is not None: if userid is not None:
if username not in self._users.keys(): if userid not in self._users.keys():
return None return None
return self._users[username] return self._users[userid]
elif apikey is not None: elif apikey is not None:
for user in self._users.values(): for user in self._users.values():
@ -419,7 +421,7 @@ class User(UserMixin):
return self._passwordHash == passwordHash return self._passwordHash == passwordHash
def get_id(self): def get_id(self):
return self._username return self.get_name()
def get_name(self): def get_name(self):
return self._username return self._username