Я создаю приложение оплаты за обучение с Flask и использую Flask-admin в качестве управления базой данных для каждой школы, которая зарегистрировалась в моем приложении.
Я уже сделал это, но теперь я действительно не уверен, как разделить доступ к данным между всеми учетными записями в школах, которые зарегистрировались для управления собственной оплатой за обучение.
С Flask-login , я могу сделать это с помощью этого кода:
@app.route('/school_admin')
@login_required
def school_admin():
school_data = db.session.query(Student.id, Student.name).filter_by(school_id=current_user.id).all()
return render_template('school_admin_dashboard.html', school_data=school_data)
Но, поскольку Flask-admin автоматически создает представления таблиц, я действительно не уверен, как это сделать ..?
Пока что я сделал ModelView следующим образом:
class SchoolAdminModelView(sqla.ModelView):
def is_accessible(self):
if not current_user.is_active or not current_user.is_authenticated:
return False
if current_user.has_role('schooladmin'):
return True
return False
def _handle_view(self, name, **kwargs):
if not self.is_accessible():
if current_user.is_authenticated:
# permission denied
abort(403)
else:
# login
return redirect(url_for('security.login', next=request.url))
class StudentModelView(SchoolAdminModelView):
pass
admin.add_view(StudentModelView(Student, db.session))
Итак, как разделить модель вида по school_id ..?
ПРИМЕЧАНИЕ: моя причина, почему я использую Flask-admin вместо Flask-login для школьного администратора из-за довольно простого управления роли пользователя и суперпользователь .
И я использую Flask-login для родителей учащегося, который является пользователем, который использует это приложение.