Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ---permission.py
- from flask import session, abort, redirect, url_for, flash, request
- from tools.database.models import *
- from functools import wraps
- def authorize(role="ADMIN", abort_code=401, message=None):
- def decorate(func):
- # print("The", func.__name__, "page now requires anonymity.")
- @wraps(func)
- def intercept(*args, **kwargs):
- if type(role) == str:
- roles = [role]
- elif type(role) == list:
- roles = role
- else:
- raise ValueError(f"Parameter 'role' must be a str or list you used a {str(type(role))}")
- if g.user:
- if g.user.role in roles:
- return func(*args, **kwargs)
- if message:
- abort(abort_code, message)
- abort(abort_code)
- return intercept
- return decorate
- def anonymous(state=True):
- def decorate(func):
- # print("The", func.__name__, "page now requires anonymity.")
- @wraps(func)
- def intercept(*args, **kwargs):
- if 'user' in session:
- user = User.get_by_id(session.get('user', None))
- anon = user is None
- else:
- anon = True
- if anon != state:
- if anon:
- flash('You must be logged in to access that page', 'warning')
- else:
- flash('You must be logged out to access that page', 'warning')
- return redirect(request.referrer) if request.referrer else redirect(url_for('index'))
- return func(*args, **kwargs)
- return intercept
- return decorate
- ---views.py
- from flask import app, session, g
- @app.before_request
- def before_request_func():
- if 'user' in session:
- try:
- g.user = User.get_by_id(session['user'])
- except Exception:
- del session['user']
- else:
- g.user = None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement