adds admin page
admin users must have role admin (which must currently be set manually via database)
This commit is contained in:
parent
9eb7ec7c8a
commit
01798e9548
43
app/main.py
43
app/main.py
|
@ -5,7 +5,8 @@ from flask import request, redirect, g
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
from flask.ext.security import Security, SQLAlchemyUserDatastore, \
|
from flask.ext.security import Security, SQLAlchemyUserDatastore, \
|
||||||
UserMixin, RoleMixin, login_required, utils
|
UserMixin, RoleMixin, login_required, roles_required, utils
|
||||||
|
from flask.ext.security import user_registered
|
||||||
from flask.ext.mail import Mail, Message
|
from flask.ext.mail import Mail, Message
|
||||||
from flask_wtf import Form
|
from flask_wtf import Form
|
||||||
from wtforms import DateField, IntegerField, DecimalField
|
from wtforms import DateField, IntegerField, DecimalField
|
||||||
|
@ -17,11 +18,8 @@ DATABASE = '/data/rollerverbrauch.db'
|
||||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+DATABASE
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+DATABASE
|
||||||
db = SQLAlchemy(app)
|
db = SQLAlchemy(app)
|
||||||
|
|
||||||
app.config['SECRET_KEY'] = 'development key'
|
|
||||||
app.config['SECURITY_PASSWORD_HASH'] = 'pbkdf2_sha512'
|
app.config['SECURITY_PASSWORD_HASH'] = 'pbkdf2_sha512'
|
||||||
app.config['SECURITY_PASSWORD_SALT'] = 'xxxxxxxxxxxxxxxxxxxxxx'
|
|
||||||
app.config['SECURITY_REGISTERABLE'] = True
|
app.config['SECURITY_REGISTERABLE'] = True
|
||||||
app.config['SECURITY_EMAIL_SENDER'] = 'pitstops@lusiardi.de'
|
|
||||||
app.config.from_envvar('config')
|
app.config.from_envvar('config')
|
||||||
app.config.from_object(__name__)
|
app.config.from_object(__name__)
|
||||||
|
|
||||||
|
@ -57,7 +55,7 @@ class User(db.Model, UserMixin):
|
||||||
)
|
)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<User %r>' % self.username
|
return '<User %r>' % self.email
|
||||||
|
|
||||||
|
|
||||||
class Pitstop(db.Model):
|
class Pitstop(db.Model):
|
||||||
|
@ -79,26 +77,21 @@ user_datastore = SQLAlchemyUserDatastore(db, User, Role)
|
||||||
security = Security(app, user_datastore)
|
security = Security(app, user_datastore)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@user_registered.connect_via(app)
|
||||||
|
def user_registered_sighandler(app, user, confirm_token):
|
||||||
|
"""
|
||||||
|
Called after a user was created
|
||||||
|
"""
|
||||||
|
role = user_datastore.find_role('user')
|
||||||
|
user_datastore.add_role_to_user(user, role)
|
||||||
|
|
||||||
|
|
||||||
@app.before_first_request
|
@app.before_first_request
|
||||||
def before_first_request():
|
def before_first_request():
|
||||||
db.create_all()
|
db.create_all()
|
||||||
|
user_datastore.find_or_create_role(name='admin', description='Role for administrators')
|
||||||
user_datastore.find_or_create_role(name='admin', description='Administrator')
|
user_datastore.find_or_create_role(name='user', description='Role for all users.')
|
||||||
user_datastore.find_or_create_role(name='end-user', description='End user')
|
|
||||||
|
|
||||||
encrypted_password = utils.encrypt_password('password')
|
|
||||||
if not user_datastore.get_user('someone@example.com'):
|
|
||||||
user_datastore.create_user(email='someone@example.com', password=encrypted_password)
|
|
||||||
if not user_datastore.get_user('admin@example.com'):
|
|
||||||
user_datastore.create_user(email='admin@example.com', password=encrypted_password)
|
|
||||||
|
|
||||||
# Commit any database changes; the User and Roles must exist before we can add a Role to the User
|
|
||||||
db.session.commit()
|
|
||||||
|
|
||||||
# Give one User has the "end-user" role, while the other has the "admin" role. (This will have no effect if the
|
|
||||||
# Users already have these Roles.) Again, commit any database changes.
|
|
||||||
user_datastore.add_role_to_user('someone@example.com', 'end-user')
|
|
||||||
user_datastore.add_role_to_user('admin@example.com', 'admin')
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,6 +168,12 @@ def get_manual():
|
||||||
return render_template('manual.html', data=g.data)
|
return render_template('manual.html', data=g.data)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/admin', methods=['GET'])
|
||||||
|
@roles_required('admin')
|
||||||
|
def get_admin_page():
|
||||||
|
return render_template('admin.html', data=g.data)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/statistics', methods=['GET'])
|
@app.route('/statistics', methods=['GET'])
|
||||||
@login_required
|
@login_required
|
||||||
def get_statistics():
|
def get_statistics():
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
Admin
|
||||||
|
{% endblock %}
|
|
@ -2,7 +2,9 @@
|
||||||
{% if current_user.email %}
|
{% if current_user.email %}
|
||||||
<li><a href='{{ url_for('create_pit_stop_form') }}'>Create Pitstop</a></li>
|
<li><a href='{{ url_for('create_pit_stop_form') }}'>Create Pitstop</a></li>
|
||||||
<li><a href='{{ url_for('get_statistics') }}'>Statistics</a></li>
|
<li><a href='{{ url_for('get_statistics') }}'>Statistics</a></li>
|
||||||
<li><a href='{{ url_for('get_manual') }}'>Manual</a></li>
|
{% if current_user.has_role('admin') %}
|
||||||
|
<li><a href='{{ url_for('get_admin_page') }}'>Admin</a></li>
|
||||||
|
{% endif %}
|
||||||
<li><a href='{{ url_for('security.logout') }}'>Logout</a></li>
|
<li><a href='{{ url_for('security.logout') }}'>Logout</a></li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li><a href='{{ url_for('security.login') }}'>Login</a></li>
|
<li><a href='{{ url_for('security.login') }}'>Login</a></li>
|
||||||
|
|
Loading…
Reference in New Issue