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 ..models import Playlist, PlaylistFile, File
from ..models import Playlist, PlaylistFile, File, Role
from .. import db
from datetime import datetime
from ..dao.Playlist import PlaylistDao
@ -9,9 +9,16 @@ from screen.ScreenManager import ScreenManager
class PlaylistAbl:
@staticmethod
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'])
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.flush()
db.session.commit()
@ -31,7 +38,14 @@ class PlaylistAbl:
@staticmethod
def 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
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}
class PlaylistView(db.Model):
__tablename__ = 'PlaylistView'
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)
class PlaylistEdit(db.Model):
__tablename__ = 'PlaylistEdit'
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)
@ -36,9 +38,15 @@ class Playlist(db.Model):
last_modified = db.Column(db.DateTime(timezone=True), default=func.now())
view = db.relationship('Role', secondary='PlaylistView', back_populates='playlists_view')
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')
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):
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)
parent_id = db.Column(db.Integer, db.ForeignKey('role.id'), default=None)
users = db.relationship('User', secondary='UserRole', back_populates='roles')
playlist_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view')
playlist_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit')
playlists_view = db.relationship('Playlist', secondary='PlaylistView', back_populates='view')
playlists_edit = db.relationship('Playlist', secondary='PlaylistEdit', back_populates='edit')
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}