Add UserAccess type and migration
This commit is contained in:
parent
cb4dccd090
commit
eef166ade5
|
@ -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')
|
|
@ -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
|
||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue