Add UserAccess type and migration

This commit is contained in:
Ivan Habunek 2019-07-04 13:15:59 +02:00 committed by Drew DeVault
parent cb4dccd090
commit eef166ade5
3 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,43 @@
"""Add UserAccess table.
Revision ID: d54ed600c4bf
Revises: 01ed05041614
Create Date: 2019-07-01 12:43:24.129613
"""
# revision identifiers, used by Alembic.
revision = 'd54ed600c4bf'
down_revision = '01ed05041614'
import sqlalchemy as sa
from alembic import op
from enum import IntFlag
from srht.flagtype import FlagType
class TicketAccess(IntFlag):
none = 0
browse = 1
submit = 2
comment = 4
edit = 8
triage = 16
all = browse | submit | comment | edit | triage
def upgrade():
op.create_table('user_access',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('tracker_id', sa.Integer(), nullable=False),
sa.Column('user_id', sa.Integer(), nullable=False),
sa.Column('permissions', FlagType(TicketAccess), nullable=False),
sa.Column('created', sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(['tracker_id'], ['tracker.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('tracker_id', 'user_id', name='idx_useraccess_tracker_user_unique')
)
def downgrade():
op.drop_table('user_access')

View File

@ -18,3 +18,4 @@ from todosrht.types.ticketcomment import TicketComment
from todosrht.types.ticketassignee import TicketAssignee
from todosrht.types.event import Event, EventType, EventNotification
from todosrht.types.label import Label, TicketLabel
from todosrht.types.useraccess import UserAccess

View File

@ -0,0 +1,31 @@
import sqlalchemy as sa
from srht.database import Base
from srht.flagtype import FlagType
from todosrht.types import TicketAccess
class UserAccess(Base):
"""
Custom permissions for user on a given tracker.
"""
__tablename__ = 'user_access'
id = sa.Column(sa.Integer, primary_key=True)
tracker_id = sa.Column(sa.Integer,
sa.ForeignKey("tracker.id", ondelete="CASCADE"), nullable=False)
tracker = sa.orm.relationship("Tracker")
user_id = sa.Column(sa.Integer,
sa.ForeignKey("user.id", ondelete="CASCADE"), nullable=False)
user = sa.orm.relationship("User")
permissions = sa.Column(FlagType(TicketAccess), nullable=False)
created = sa.Column(sa.DateTime, nullable=False)
__table_args__ = (
sa.UniqueConstraint("tracker_id", "user_id",
name="idx_useraccess_tracker_user_unique"),
)
def __repr__(self):
return '<UserAccess {}>'.format(self.id)