Source code for flask_diamond.facets.administration

# -*- coding: utf-8 -*-
# Flask-Diamond (c) Ian Dennis Miller

from flask_admin import Admin
import flask_security as security
from flask_admin import BaseView, expose, AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_admin.base import MenuLink
from flask_security.utils import encrypt_password
import flask

admin = Admin()


[docs]def init_administration(self, index_view=None, user=None, role=None): """ Initialize the Administrative GUI. :param index_view: the View that will act as the index page of the admin GUI. :type index_view: AdminIndexView :returns: None The administration GUI is substantially derived from `Flask-Admin <http://flask-admin.readthedocs.org/en/latest/>`_. When this function is called, it will instantiate blueprints so the application serves the admin GUI via the URL http://localhost/admin. Typically, you will want to call this function even if you override it. The following example illustrates using super() to invoke this administration() function from within your own application. >>> admin = super(MyApp, self).administration( >>> index_view=MyApp.modelviews.RedirectView(name="Home") >>> ) """ admin = Admin( name=self.app.config["PROJECT_NAME"], base_template='admin/login_base.html', index_view=index_view or ForceLoginView(name="Home") ) from .. import db if not user or not role: from ..models.user import User as user from ..models.role import Role as role admin.init_app(self.app) admin.add_view(UserView(user, db.session, category="Admin")) admin.add_view(AdminModelView(role, db.session, category="Admin")) return admin
class AuthMixin: """ Require user authentication to be accessible """ def is_accessible(self): """ the View is accessible if the User is authenticated """ return security.current_user.is_authenticated class AdminMixin: """ Require admin Role to be accessible """ def is_accessible(self): """ the View is accessible if the User has the Admin Role """ return security.current_user.has_role("Admin") class AuthView(AuthMixin, BaseView): """ A View that requires authentication """ pass class AdminView(AdminMixin, BaseView): """ A View that requires the Admin Role """ pass class AuthModelView(AuthMixin, ModelView): """ A ModelView that requires authentication """ pass class AdminModelView(AdminMixin, ModelView): """ A ModelView that requires the Admin Role """ pass class AuthenticatedMenuLink(AuthMixin, MenuLink): """ A MenuLink that requires authentication """ pass class UserView(AdminModelView): """ Manage the User Model """ # column_filters = ['email'] column_exclude_list = ('password', 'active', 'confirmed_at') column_searchable_list = ('email', ) can_delete = False create_template = 'admin/create_user.html' def create_model(self, form): self.model.register( name=form.data["name"], email=form.data["email"], password=form.data["password"], confirmed=True, roles=["User"], ) return flask.redirect(flask.url_for("user.index_view")) def update_model(self, form, model): original_password = model.password model.update(**form.data) if form.data["password"] != original_password: model.password = encrypt_password(form.data["password"]) model.save() return flask.redirect(flask.url_for("user.index_view")) class ForceLoginView(AdminIndexView): """ Allocate the root URL and require authentication """ def is_accessible(self): """ the View is accessible if the User is authenticated """ return security.current_user.is_authenticated @expose('/') def index(self): return self.render("/admin/index.html")

Topic Navigation

Version