我正在为我的孩子们开发一个工具。该工具包含许多应用程序(绘图、图书馆、测验......)。每个用户都可以拥有多个具有不同权限的应用程序。登录后,每个用户都应该获得可用应用程序的个人概览 (
permission == view
)。我还需要知道用户是否有其他权限 (add/update/delete
) 来放置管理功能的按钮。我很难创建模型和关系。
我的目标是:
user = User.query.filter_by(user_id = current_user.id).first()
#user should have the structure: [{'app1':{prop1:'', prop2:'', permissions:['view', 'add']},...]
#where prop-n are placeholder
#render_template('overview.html', user)
在观看了许多视频并阅读了文档后,我能够连接应用程序和用户
from app import db, login_manager
from flask_login import UserMixin
from sqlalchemy.ext.associationproxy import association_proxy
class User(db.Model, UserMixin):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(20), unique = True, nullable = False)
app_association = db.relationship('App2User', back_populates = 'user')
apps = association_proxy("app_association","apps")
class App(db.Model):
__tablename__ = 'apps'
id = db.Column(db.Integer, primary_key = True)
user = db.relationship('App2User', back_populates = 'apps')
class App2User(db.Model):
__tablename__ = 'apps_2_user'
id = db.Column(db.Integer, primary_key = True)
app_id = db.Column(db.Integer, db.ForeignKey('apps.id'))
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', back_populates = 'app_association')
apps = db.relationship('App', back_populates = 'user')
db.UniqueConstraint(app_id, user_id)
现在我创建了两个新类
class Permission(db.Model):
__tablename__ = 'apps_permissions'
id = db.Column(db.Integer, primary_key = True)
name= db.Column(db.String(100), nullable = False, unique = True)
class Permission2App2User(db.Model):
__tablename__ = 'rechte_2_apps_2_user'
id = db.Column(db.Integer, primary_key = True)
permission_id = db.Column(db.Integer, db.ForeignKey('apps_rechte.id'))
app2user_id = db.Column(db.Integer, db.ForeignKey('apps_2_user.id'))
因为每个
App2User
可以有多个权限,每个权限可以有多个App2User
我又一次有一个多对多的关系,我试过类似地解决这个问题。
有人可以帮忙吗?