MCS Project with Prof. Liut and Aameri
https://hacklabbooking.utm.utoronto.ca • Documentation
The Hacklab Booking System is a web application that allows users to book the Hacklab for a specific time and date.
The application is built using Material UI and React.
The database is built using PostgreSQL.
The application is is Docker containers and is deployed using Docker Compose.
As of now, the project is hosted on a VM provided by UTM. There is an Apache instance listening on ports 80 and 443 and reverse proxies to port 3555.
Our app is self-contained and has its own nginx reverse proxy to have all requests to /api
directed to the backend container and all other requests to the frontend container.
The front end is created with react and is served by serve. The backend is a nodejs app.
To deploy, get the latest code, and run docker compose up -d --build
. This will start up our application on port 3555. A different port would require modifying the compose file.
The student role is the default role given to everyone upon first launch (given already authenticated with Shibboleth. It gives the following permissions:
The request approver role is manually given to faculty upon request. After being granted the approver
role, faculty must also request permission to become an approver for each room they would like to approve. It gives the following permissions:
The TCard Approver role is given to system administrators (e.g., Andrew Wang) for the purpose of notifying the student that TCard access has been granted. It gives the following permissions:
The administrator role has all permissions (i.e., the permissions of both Request Approver and TCard Approver) and is given to faculty upon request. It gives the following permissions:
Groups are a concept used by the Hacklab Booking System to allow multiple people to view the status of bookings. There is no limit to how many members a group can have, and there is no limit to the number of total groups. Students must be added to a group or create a group to create requests.
In a group, there are two roles with the following permissions:
Our design has some limitations: