27 lines
899 B
Python
27 lines
899 B
Python
from sqlalchemy import String, Column
|
|
from sqlalchemy.dialects.postgresql import ARRAY
|
|
from sqlalchemy.orm.attributes import flag_modified
|
|
|
|
from atst.models import Base, types, mixins
|
|
|
|
|
|
class Role(Base, mixins.TimestampsMixin):
|
|
__tablename__ = "roles"
|
|
|
|
id = types.Id()
|
|
name = Column(String, index=True, unique=True, nullable=False)
|
|
description = Column(String, nullable=False)
|
|
permissions = Column(ARRAY(String), index=True, server_default="{}", nullable=False)
|
|
|
|
def add_permission(self, permission):
|
|
perms_set = set(self.permissions)
|
|
perms_set.add(permission)
|
|
self.permissions = list(perms_set)
|
|
flag_modified(self, "permissions")
|
|
|
|
def remove_permission(self, permission):
|
|
perms_set = set(self.permissions)
|
|
perms_set.discard(permission)
|
|
self.permissions = list(perms_set)
|
|
flag_modified(self, "permissions")
|