43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from flask import current_app, redirect, flash
|
|
from flask_login import current_user
|
|
import flask_sqlalchemy
|
|
import flask_migrate
|
|
import flask_admin
|
|
import flask_babel
|
|
import prometheus_flask_exporter
|
|
|
|
|
|
from flask_admin.contrib.sqla import ModelView as BaseModelView
|
|
|
|
|
|
class AdminSecurityMixin:
|
|
def is_accessible(self):
|
|
return current_user.is_authenticated
|
|
|
|
def inaccessible_callback(self, name, **kwargs):
|
|
# redirect to login page if user doesn't have access
|
|
return current_app.login_manager.unauthorized()
|
|
|
|
|
|
class SuperAdminSecurityMixin:
|
|
def is_accessible(self):
|
|
return current_user.is_authenticated and current_user.superadmin
|
|
|
|
def inaccessible_callback(self, name, **kwargs):
|
|
flash("Nie dla psa, dla pana to!")
|
|
return redirect('/admin')
|
|
|
|
|
|
class ModelView(AdminSecurityMixin, BaseModelView):
|
|
pass
|
|
|
|
|
|
class ModelViewHighSecurity(SuperAdminSecurityMixin, BaseModelView):
|
|
pass
|
|
|
|
|
|
db = flask_sqlalchemy.SQLAlchemy()
|
|
migrate = flask_migrate.Migrate()
|
|
admin = flask_admin.Admin(name='Covid-Formity CRMâ„¢', template_mode='bootstrap3')
|
|
babel = flask_babel.Babel()
|
|
metrics = prometheus_flask_exporter.PrometheusMetrics(None, group_by='url_rule')
|