This commit is contained in:
Xevion
2019-07-06 04:57:26 -05:00
parent 3564ab0caa
commit 5022485ff6
8 changed files with 98 additions and 18 deletions

View File

@@ -9,11 +9,15 @@ class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
register_timestamp = db.Column(db.DateTime, default=datetime.utcnow)
password_hash = db.Column(db.String(64))
posts = db.relationship('Post', backref='author', lazy='dynamic')
search_history = db.relationship('Search', backref='user', lazy='dynamic')
uroles = db.Column(db.String(80), default='')
about_me = db.Column(db.String(320))
last_seen = db.Column(db.DateTime, default=datetime.utcnow)
show_email = db.Column
def set_password(self, password):
self.password_hash = generate_password_hash(password)
@@ -22,10 +26,36 @@ class User(UserMixin, db.Model):
raise "{} has no password_hash set!".format(self.__repr__())
return check_password_hash(self.password_hash, password)
# Retains order while making sure that there are no duplicate role values and they are capitalized
def post_role_processing(self):
user_roles = self.uroles.split(' ')
user_roles = list(dict.fromkeys(user_roles))
self.uroles = ' '.join([role.title() for role in user_roles])
def delete_role(self, role):
return self.delete_roles([role])
# Will return True if successful, else False if a role didn't exist
def delete_roles(self, roles, ignore=True):
user_roles = self.uroles.split(' ')
success = True
for role in roles:
try:
user_roles.remove(role)
except ValueError as e:
if not ignore:
raise e
success = False
return success
def get_roles(self):
return self.uroles.split(' ')
def add_roles(self, roles):
def add_role(self, role):
self.add_roles([role])
def add_roles(self, roles, postprocess=True):
user_roles = self.uroles.split(' ')
if type(roles) == str:
user_roles.append(roles)
@@ -33,6 +63,11 @@ class User(UserMixin, db.Model):
user_roles.extend(roles)
user_roles = ' '.join(user_roles)
self.uroles = user_roles
if postprocess:
self.post_role_processing()
def has_role(self, role):
return self.has_roles([role])
# Input: ['Insane', ['Fortunate', 'Blessed']]
# Meaning: Must have 'Insane' role, as well as 'Fortunate' or 'Blessed' roles.