create playlist with permissions

This commit is contained in:
grimhilt 2023-08-14 01:19:42 +02:00
parent 8b507517f4
commit 9ae9f1797a
2 changed files with 29 additions and 7 deletions

View File

@ -1,5 +1,5 @@
from flask import jsonify from flask import jsonify
from ..models import Playlist, PlaylistFile, File from ..models import Playlist, PlaylistFile, File, Role
from .. import db from .. import db
from datetime import datetime from datetime import datetime
from ..dao.Playlist import PlaylistDao from ..dao.Playlist import PlaylistDao
@ -9,9 +9,16 @@ from screen.ScreenManager import ScreenManager
class PlaylistAbl: class PlaylistAbl:
@staticmethod @staticmethod
def create(data): def create(data):
print(data) roles_edit = db.session.query(Role).filter(Role.id.in_(data['edit'])).all()
roles_view = db.session.query(Role).filter(Role.id.in_(data['view'])).all()
new_playlist = Playlist(name=data['name'], owner_id=current_user.as_dict()['id']) new_playlist = Playlist(name=data['name'], owner_id=current_user.as_dict()['id'])
return jsonify() for role in roles_edit:
new_playlist.edit.append(role)
for role in roles_view:
new_playlist.view.append(role)
db.session.add(new_playlist) db.session.add(new_playlist)
db.session.flush() db.session.flush()
db.session.commit() db.session.commit()
@ -31,7 +38,14 @@ class PlaylistAbl:
@staticmethod @staticmethod
def get_playlist(playlist_id): def get_playlist(playlist_id):
(query, files) = PlaylistDao.get_playlist(playlist_id) (query, files) = PlaylistDao.get_playlist(playlist_id)
return jsonify({'id': query.id, 'name': query.name, 'owner_id': query.owner_id, 'files': files}) query = query.as_dict_with_roles()
return jsonify({ \
'id': query['id'], \
'name': query['name'], \
'owner_id': query['owner_id'], \
'view': query['view'], \
'edit': query['edit'], \
'files': files})
@staticmethod @staticmethod
def list(): def list():

View File

@ -22,10 +22,12 @@ class File(db.Model):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}
class PlaylistView(db.Model): class PlaylistView(db.Model):
__tablename__ = 'PlaylistView'
playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True) playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True)
role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True) role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True)
class PlaylistEdit(db.Model): class PlaylistEdit(db.Model):
__tablename__ = 'PlaylistEdit'
playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True) playlist_id = db.Column(db.Integer, db.ForeignKey('playlist.id'), primary_key=True)
role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True) role_id = db.Column(db.Integer, db.ForeignKey('role.id'), primary_key=True)
@ -36,9 +38,15 @@ class Playlist(db.Model):
last_modified = db.Column(db.DateTime(timezone=True), default=func.now()) last_modified = db.Column(db.DateTime(timezone=True), default=func.now())
view = db.relationship('Role', secondary='PlaylistView', back_populates='playlists_view') view = db.relationship('Role', secondary='PlaylistView', back_populates='playlists_view')
edit = db.relationship('Role', secondary='PlaylistEdit', back_populates='playlists_edit') edit = db.relationship('Role', secondary='PlaylistEdit', back_populates='playlists_edit')
files = db.relationship('File', secondary='PlaylistFile')
playlist_files = db.relationship('PlaylistFile', order_by='PlaylistFile.position', back_populates='playlist') playlist_files = db.relationship('PlaylistFile', order_by='PlaylistFile.position', back_populates='playlist')
def as_dict_with_roles(self):
res = self.as_dict()
res['view'] = [role.as_dict() for role in self.view]
res['edit'] = [role.as_dict() for role in self.edit]
return res
def as_dict(self): def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}
@ -54,8 +62,8 @@ class Role(db.Model):
permissions= db.Column(db.Integer, default=0) permissions= db.Column(db.Integer, default=0)
parent_id = db.Column(db.Integer, db.ForeignKey('role.id'), default=None) parent_id = db.Column(db.Integer, db.ForeignKey('role.id'), default=None)
users = db.relationship('User', secondary='UserRole', back_populates='roles') users = db.relationship('User', secondary='UserRole', back_populates='roles')
playlist_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view') playlists_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view')
playlist_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit') playlists_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit')
def as_dict(self): def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns} return {c.name: getattr(self, c.name) for c in self.__table__.columns}