示例#1
0
class Permission(db.Model):
    __tablename__ = 'permission'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), nullable=False)
    resource_id = db.Column(db.Integer, db.ForeignKey('resource.id'))

    def __init__(self, name):
        self.name = name
示例#2
0
class Resource(db.Model, TrackModificationsMixIn):
    __tablename__ = 'resource'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(255), nullable=False)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
    permissions = db.relationship('Permission',
                                  backref=db.backref('resource'),
                                  cascade='all, delete-orphan')
    operations = db.relationship('Operation',
                                 backref=db.backref('resource'),
                                 cascade='all, delete-orphan')

    def __init__(self, name, permissions, needed_ids=None):
        """Initializes a new Resource object, which is a type of Resource that a Role may have access to.

        Args:
            name (str): Name of the Resource object.
            permissions (list[str]): List of permissions ("create", "read", "update", "delete", "execute")
                for the Resource
        """
        self.name = name
        self.needed_ids = needed_ids
        self.set_permissions(permissions)

    def set_permissions(self, new_permissions):
        """Adds the given list of permissions to the Resource object.

        Args:
            new_permissions (list|set[str]): A list of permission names with which the Resource will be associated.
                These permissions must be in the set ["create", "read", "update", "delete", "execute"].
        """
        self.permissions = []
        new_permission_names = set(new_permissions)
        self.permissions.extend(
            [Permission(permission) for permission in new_permission_names])

    def as_json(self, with_roles=False):
        """Returns the dictionary representation of the Resource object.

        Args:
            with_roles (bool, optional): Boolean to determine whether or not to include Role objects associated with the
                Resource in the JSON representation. Defaults to False.
        """
        out = {
            'id':
            self.id,
            'name':
            self.name,
            'operations': [(operation.operation_id, operation.permissions_list)
                           for operation in self.operations],
            'permissions':
            [permission.name for permission in self.permissions]
        }
        if with_roles:
            out["role"] = self.role.name
        return out
示例#3
0
class Operation(db.Model):
    __tablename__ = 'operation'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    operation_id = db.Column(db.String(255), nullable=False)
    permissions_list = db.Column(ARRAY(db.String(255)))
    resource_id = db.Column(db.Integer, db.ForeignKey('resource.id'))

    def __init__(self, operation_id, permissions_list):
        self.operation_id = operation_id
        self.permissions_list = permissions_list
示例#4
0
class ScheduledWorkflow(db.Model):
    """A SqlAlchemy table representing a workflow scheduled for execution

    Attributes:
        id (int): The primary key
        workflow_id (UUID): The id of the workflow scheduled for execution
    """
    __tablename__ = 'scheduled_workflow'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    workflow_id = db.Column(UUIDType(binary=False), nullable=False)
    task_id = db.Column(db.Integer, db.ForeignKey('scheduled_task.id', ondelete='CASCADE'))
示例#5
0
import logging
from datetime import datetime

from passlib.hash import pbkdf2_sha512
from sqlalchemy.ext.hybrid import hybrid_property

from api_gateway.extensions import db
from api_gateway.helpers import utc_as_rfc_datetime
from api_gateway.serverdb.mixins import TrackModificationsMixIn
from api_gateway.serverdb.role import Role

logger = logging.getLogger(__name__)

user_roles_association = db.Table(
    'user_roles_association',
    db.Column('role_id', db.Integer, db.ForeignKey('role.id')),
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')))


class User(db.Model, TrackModificationsMixIn):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    roles = db.relationship('Role',
                            secondary=user_roles_association,
                            backref=db.backref('users', lazy='dynamic'))
    username = db.Column(db.String(80), unique=True, nullable=False)
    _password = db.Column('password', db.String(255), nullable=False)
    active = db.Column(db.Boolean, default=True)
    last_login_at = db.Column(db.DateTime)
    current_login_at = db.Column(db.DateTime)
    last_login_ip = db.Column(db.String(45))