Updated roles, db migrate, @require_role v1

This commit is contained in:
Xevion
2019-07-03 13:46:12 -05:00
parent 4bbc17ec52
commit 0c8437edd8
4 changed files with 54 additions and 7 deletions

View File

@@ -11,6 +11,7 @@ class User(UserMixin, db.Model):
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='')
def set_password(self, password):
self.password_hash = generate_password_hash(password)
@@ -19,6 +20,33 @@ class User(UserMixin, db.Model):
if self.password_hash is None:
raise "{} has no password_hash set!".format(self.__repr__())
return check_password_hash(self.password_hash, password)
def get_roles(self):
return self.uroles.split(' ')
def add_roles(self, roles):
user_roles = self.uroles.split(' ')
if type(roles) == str:
user_roles.append(roles)
elif type(roles) == list:
user_roles.extend(roles)
user_roles = ' '.join(user_roles)
self.uroles = user_roles
# Input: ['Insane', ['Fortunate', 'Blessed']]
# Meaning: Must have 'Insane' role, as well as 'Fortunate' or 'Blessed' roles.
def has_roles(self, roles):
user_roles = self.uroles.split(' ')
for reqrole in roles:
# If we have this role
if type(reqrole) == str:
if reqrole not in user_roles:
return False
# If we have any of these roles
elif type(reqrole) == list:
if not any([subreqrole in user_roles for subreqrole in reqrole]):
return False
return True
def __repr__(self):
return '<User {}>'.format(self.username)