Skip to content
Snippets Groups Projects
Commit dbf540d0 authored by Ivan Procaccini's avatar Ivan Procaccini
Browse files

Feat: Add role-based automatic redirection on login

parent 4d4165da
No related branches found
No related tags found
No related merge requests found
...@@ -20,7 +20,7 @@ DUMMY_USER_BASE = { ...@@ -20,7 +20,7 @@ DUMMY_USER_BASE = {
"givenName": "Harry", "givenName": "Harry",
"sn": "Potter", "sn": "Potter",
"distinguishedName": {"OU": ["doc"]}, "distinguishedName": {"OU": ["doc"]},
"extensionAttribute6": "Staff", "extensionAttribute6": "Student",
}, },
"adumble": { "adumble": {
"name": "adumble", "name": "adumble",
......
...@@ -5,6 +5,7 @@ class AuthenticatedUser(db.Model): ...@@ -5,6 +5,7 @@ class AuthenticatedUser(db.Model):
username = db.Column(db.String(10), primary_key=True) username = db.Column(db.String(10), primary_key=True)
firstname = db.Column(db.String) firstname = db.Column(db.String)
surname = db.Column(db.String) surname = db.Column(db.String)
role = db.Column(db.String, nullable=False)
def get_id(self): def get_id(self):
return self.username return self.username
......
...@@ -8,7 +8,7 @@ from werkzeug.utils import redirect ...@@ -8,7 +8,7 @@ from werkzeug.utils import redirect
from .. import messages, login_manager, ldap_service from .. import messages, login_manager, ldap_service
from ..database import db from ..database import db
from ..forms import LoginForm from ..forms import LoginForm
from ..ldap_authentication.authenticator import NAME, SURNAME from ..ldap_authentication.authenticator import NAME, SURNAME, TITLE
from ..models import AuthenticatedUser from ..models import AuthenticatedUser
bp = Blueprint("auth", __name__) bp = Blueprint("auth", __name__)
...@@ -50,6 +50,7 @@ def login(): ...@@ -50,6 +50,7 @@ def login():
username=username, username=username,
firstname=attributes.get(NAME, username.upper()), firstname=attributes.get(NAME, username.upper()),
surname=attributes.get(SURNAME, ""), surname=attributes.get(SURNAME, ""),
role=normalize_role(attributes.get(TITLE)),
) )
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()
...@@ -75,11 +76,17 @@ def logout(): ...@@ -75,11 +76,17 @@ def logout():
################################################################## ##################################################################
# U T I L I T I E S # U T I L I T I E S
################################################################## ##################################################################
def normalize_role(ldap_role):
return "student" if ldap_role in {"Student", "PGT", "Casual"} else "staff"
def to_next_page_or_home(next_pg): def to_next_page_or_home(next_pg):
if next_pg and is_safe_url(request.host_url, next_pg): if next_pg and is_safe_url(request.host_url, next_pg):
return next_pg return next_pg
else: else:
return url_for("student.projects") return url_for(f"{current_user.role}.projects")
def is_safe_url(request_host_url, target): def is_safe_url(request_host_url, target):
......
"""Add role column
Revision ID: 6dea3a5014b0
Revises: a3f30aab004c
Create Date: 2022-08-23 11:45:49.807695
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "6dea3a5014b0"
down_revision = "a3f30aab004c"
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column("authenticated_user", sa.Column("role", sa.String(), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column("authenticated_user", "role")
# ### end Alembic commands ###
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment