add join table between portfolio_roles and roles

This commit is contained in:
dandds 2019-03-07 06:22:23 -05:00
parent b711330b9e
commit 31bcb662b5
2 changed files with 44 additions and 1 deletions

View File

@ -0,0 +1,33 @@
"""add permission sets to portfolio_role
Revision ID: 938a31795096
Revises: db161adbafdf
Create Date: 2019-03-07 06:13:05.400911
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '938a31795096'
down_revision = 'db161adbafdf'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('portfolio_roles_roles',
sa.Column('portfolio_role_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.Column('role_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.ForeignKeyConstraint(['portfolio_role_id'], ['portfolio_roles.id'], ),
sa.ForeignKeyConstraint(['role_id'], ['roles.id'], )
)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('portfolio_roles_roles')
# ### end Alembic commands ###

View File

@ -1,5 +1,5 @@
from enum import Enum from enum import Enum
from sqlalchemy import Index, ForeignKey, Column, Enum as SQLAEnum from sqlalchemy import Index, ForeignKey, Column, Enum as SQLAEnum, Table
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
@ -30,6 +30,14 @@ class Status(Enum):
PENDING = "pending" PENDING = "pending"
portfolio_roles_roles = Table(
"portfolio_roles_roles",
Base.metadata,
Column("portfolio_role_id", UUID(as_uuid=True), ForeignKey("portfolio_roles.id")),
Column("role_id", UUID(as_uuid=True), ForeignKey("roles.id")),
)
class PortfolioRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): class PortfolioRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
__tablename__ = "portfolio_roles" __tablename__ = "portfolio_roles"
@ -48,6 +56,8 @@ class PortfolioRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin):
status = Column(SQLAEnum(Status, native_enum=False), default=Status.PENDING) status = Column(SQLAEnum(Status, native_enum=False), default=Status.PENDING)
permission_sets = relationship("Role", secondary=portfolio_roles_roles)
def __repr__(self): def __repr__(self):
return "<PortfolioRole(role='{}', portfolio='{}', user_id='{}', id='{}')>".format( return "<PortfolioRole(role='{}', portfolio='{}', user_id='{}', id='{}')>".format(
self.role.name, self.portfolio.name, self.user_id, self.id self.role.name, self.portfolio.name, self.user_id, self.id