2019-02-03 15:00:37 +01:00
|
|
|
# Planète Casio v5
|
|
|
|
# models.privs: Database models for groups and privilege management
|
|
|
|
|
|
|
|
from app import db
|
2019-02-03 15:40:37 +01:00
|
|
|
from config import V5Config
|
2019-02-03 15:00:37 +01:00
|
|
|
|
|
|
|
# Privileges are represented by strings (slugs), for instance "post-news" or
|
|
|
|
# "delete-own-posts". Belonging to a group automatically grants a user the
|
|
|
|
# privileges of that group; additionally, administrators (or any people with
|
|
|
|
# the "grant-special-privileges" privilege) can grant privileges on a per-user
|
|
|
|
# basis.
|
|
|
|
|
|
|
|
# SpecialPrivilege: Privilege manually granted to a user
|
|
|
|
class SpecialPrivilege(db.Model):
|
|
|
|
__tablename__ = 'special_privilege'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
|
|
|
# User that is granted the privilege
|
|
|
|
uid = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
|
|
|
|
# Privilege name
|
2019-02-03 15:40:37 +01:00
|
|
|
priv = db.Column(db.String(V5Config.PRIVS_MAXLEN))
|
2019-02-03 15:00:37 +01:00
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return f'<Privilege "{self.priv}" of user #{uid}>'
|
|
|
|
|
|
|
|
# Group: User group, corresponds to a community role and a set of privileges
|
|
|
|
class Group(db.Model):
|
|
|
|
__tablename__ = 'group'
|
|
|
|
|
|
|
|
# Unique group ID
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
# Full name, such as "Administrateur" or "Membre d'honneur".
|
|
|
|
name = db.Column(db.Unicode(50), unique=True)
|
|
|
|
# The CSS code should not assume any specific layout and typically applies
|
|
|
|
# to a text node. Use attributes like color, font-style, font-weight, etc.
|
|
|
|
css = db.Column(db.UnicodeText)
|
|
|
|
# List of members (lambda delays evaluation)
|
|
|
|
members = db.relationship('Member', secondary=lambda:GroupMember,
|
|
|
|
back_populates='groups')
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return f'<Group "{self.name}">'
|
|
|
|
|
|
|
|
# Many-to-many relation for users belonging to groups
|
|
|
|
GroupMember = db.Table('group_member', db.Model.metadata,
|
|
|
|
db.Column('gid', db.Integer, db.ForeignKey('group.id')),
|
|
|
|
db.Column('uid', db.Integer, db.ForeignKey('member.id')))
|
|
|
|
|
|
|
|
# GroupPrivilege: Privilege granted to all users in a group
|
|
|
|
class GroupPrivilege(db.Model):
|
|
|
|
__tablename__ = 'group_privilege'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
|
|
|
# Group that is granted the privilege
|
|
|
|
gid = db.Column(db.Integer, db.ForeignKey('group.id'), index=True)
|
|
|
|
# Privilege name
|
2019-02-03 15:40:37 +01:00
|
|
|
priv = db.Column(db.String(V5Config.PRIVS_MAXLEN))
|