|
1 |
| -from flask import Blueprint, request |
| 1 | +from decorator import decorator |
2 | 2 |
|
3 |
| -from ..common import require_permission |
| 3 | +from flask import Blueprint, request, current_app as app, redirect, url_for, abort |
| 4 | +from flask_login import current_user |
| 5 | + |
| 6 | +from models.volunteer import Volunteer |
4 | 7 |
|
5 | 8 | volunteer = Blueprint("volunteer", __name__)
|
6 | 9 |
|
| 10 | + |
| 11 | +# This is like require_permission but redirects to volunteer sign-up |
| 12 | +def require_volunteer_permission(permission): |
| 13 | + def call(f, *args, **kwargs): |
| 14 | + if current_user.is_authenticated: |
| 15 | + if not Volunteer.get_for_user(current_user): |
| 16 | + return redirect(url_for("volunteer.sign_up", next=request.path)) |
| 17 | + if current_user.has_permission(permission): |
| 18 | + return f(*args, **kwargs) |
| 19 | + abort(404) |
| 20 | + return app.login_manager.unauthorized() |
| 21 | + |
| 22 | + return decorator(call) |
| 23 | + |
| 24 | + |
7 | 25 | # User basically means they have signed up
|
8 | 26 | # These aren't needed for the admin views as they have their auth baked in.
|
9 |
| -v_user_required = require_permission("volunteer:user") |
10 |
| -v_admin_required = require_permission("volunteer:admin") |
11 |
| -v_manager_required = require_permission("volunteer:manager") |
| 27 | +v_user_required = require_volunteer_permission("volunteer:user") |
| 28 | +v_admin_required = require_volunteer_permission("volunteer:admin") |
| 29 | +v_manager_required = require_volunteer_permission("volunteer:manager") |
12 | 30 |
|
13 | 31 |
|
14 | 32 | @volunteer.context_processor
|
|
0 commit comments