commit 3fedc042ffe27b9edda4dbe0c5b120e06ae3aa37
parent 285fd788569d380e7d0f06e4f89e043da0ec80a3
Author: Brennen T. Mazur <brennen@madis.cool>
Date: Wed, 1 Mar 2023 16:36:39 -0700
added role/permission functionality to admin and dashboard pages
Diffstat:
4 files changed, 74 insertions(+), 57 deletions(-)
diff --git a/app/routes.py b/app/routes.py
@@ -106,22 +106,33 @@ def load_user(username):
@login_required
def dashboard():
-# all_permissions=mongo.db.permissions_collection.find_one('current_user.role')
-# dashperms=all_permissions['dashboard']
+ dashperms=mongo.db.permissions_collection.find_one({'label': current_user.role},{'dashboard':1,'_id':0})
+ dashperms=dashperms['dashboard']
+
+ clocked_in_users = mongo.db.time_collection.find({'clock_out': {'$exists':False}})
+ # Move to a isUserClockedIn(default: username=current_user)
+ if mongo.db.time_collection.find_one({'modified_by.0': current_user.username,'clock_out':{'$exists':False}}):
+ clocked_out = False
+ else:
+ clocked_out = True
+ #End isUserClockedIn()
clockinform=PunchclockinWidget()
clockoutform=PunchclockoutWidget()
fleetoutform=FleetCheckoutForm()
fleetinform=FleetCheckinForm()
- currenttime=datetime.datetime.utcnow()
+
+ if clockoutform.validate_on_submit():
+ mongo.db.time_collection.insert({'clock_out' : [datetime.datetime.utcnow()],
+ 'lunch' : clockoutform.lunchBox.data,
+ 'per_diem' : clockoutform.per_diemBox.data})
+ return redirect(url_for('dashboard'))
if clockinform.validate_on_submit():
- mongo.db.fleet_collection.insert_one({'clock_in' : datetime.datetime.utcnow(),
- 'modified_by' : [current_user.username],
- 'date' : datetime.datetime.today(),
- 'project' : clockinform.project.data,
- 'lunch' : clockinform.lunch.data,
- 'per_diem' : clockinform.perdiem.data})
+ mongo.db.time_collection.insert({'clock_in' : [datetime.datetime.utcnow()],
+ 'modified_by' : [current_user.username],
+ 'date' : datetime.datetime.today(),
+ 'project' : clockinform.project.data})
return redirect(url_for('dashboard'))
available_projects = {'STC Webapp':'stcapp','YEP Website':'yepsite','Volunteer Day':'volday'} #not used/not working
@@ -133,14 +144,17 @@ def dashboard():
'operator':current_user.username,
'additional_notes':fleetoutform.additionalnotes.data})
return redirect(url_for('dashboard'))
- return render_template('dashboard/layout.html',currenttime=currenttime,projects=available_projects,clockinform=clockinform,fleetinform=fleetinform,fleetoutform=fleetoutform,ORGNAME=OrganizationName)
+ return render_template('dashboard/layout.html',permissions=dashperms,projects=available_projects,clocked_out=clocked_out,clockoutform=clockoutform,clockinform=clockinform,fleetinform=fleetinform,fleetoutform=fleetoutform,ORGNAME=OrganizationName)
@app.route("/admin")
@login_required
def admin():
+ adminperms=mongo.db.permissions_collection.find_one({'label': current_user.role},{'admin':1,'_id':0})
+ adminperms=adminperms['admin']
+
#all_permissions=mongo.db.permissions_collection.find_one({"label":current_user.role})
#admnperms=all_permissions.admin
- return render_template ('admin/layout.html',ORGNAME=OrganizationName)
+ return render_template ('admin/layout.html',permissions=adminperms,ORGNAME=OrganizationName)
# Report Routes
@app.route('/admin/agreement')
diff --git a/app/templates/admin/layout.html b/app/templates/admin/layout.html
@@ -1,16 +1,11 @@
{% extends 'base.html' %}
-{% block title %}Management{% endblock %}
+{% block title %}Admin{% endblock %}
{% block content %}
<section class="admin-grid">
- <!--functioncall checking role for admin. while loop return permissioned 'widgets' -->
-
<!-- returned values from admin check is array of permissive ACCESS else return 'missing permissions response' -->
-
-
-<!-- for x in db.get_collection('permissions_collection').find_one(current_user.role) -->
- {%- for x in ['reports','agreements','roles','users'] %}
+ {%- for x in permissions %}
{% include 'admin/'~x~'/widget.html' %}
{%- else-%}
{{ 'You do not have permission to access this page' }}
diff --git a/app/templates/dashboard/layout.html b/app/templates/dashboard/layout.html
@@ -4,13 +4,11 @@
{% block content %}
<section class="base-grid">
- <!-- TODO: function call for permissive ACCESS, returns array of strings -->
-
- <!-- For loop takes getWidget()'s -> [] iterates through to include Accessabe widgets, else deny's request -->
- {%- for x in ['punchclock','activeusers','fleet'] %}
+ <!-- for loop takes current user's dashboard permissions and iterates through to include Accessable widgets, else reports lack of permissions -->
+ {%- for x in permissions %}
{% include '/dashboard/'~x~'/widget.html' %}
{%- else %}
- {{ 'You do not have permission to access this page' }}<!--reroute to login page on no access? -->
+ {{ 'You do not have permission to access this page' }}
{%- endfor %}
</section>
diff --git a/seeds.py b/seeds.py
@@ -36,7 +36,7 @@ user1 = {
'username': 'nikolasmmazur',
'birthday': '1999-03-26',
'password_hash': 'pbkdf2:sha256:260000$DBIF9Dfq1OcsYwSk$37f5cc231ff2c97cc7a6b60f25c767380574f1c01cc17069da4f3e7e25ba3370',
- 'role': 'developer',
+ 'role': 'Web Developer',
'address': '275 DuPont Dr, Lander Wy 82520',
'branch': 'Lander',
'phonenumber': '3074380460',
@@ -54,7 +54,7 @@ user2 = {
'username': 'brennentmazur',
'birthday': '1997-04-28',
'password_hash': 'pbkdf2:sha256:260000$ukazhSEG3m9xH2oL$5cc00ff3411f614720287c18f615d71578face70abc990ea5def89f520b0ac2c',
- 'role': 'crewlead',
+ 'role': 'Crew Lead',
'branch': 'Dillon',
'phonenumber': 3074380491,
'address': '705 N Railroad Ave, Dillon MT, 59725',
@@ -151,38 +151,48 @@ projects2 = {
}
# Permissions documents (only needs array list of str for each 'service')
-roles = {
- 'crew': {
- 'label': 'Crew',
- 'dashboard': ['punchclock'],
- 'admin': []
- },
- 'asistcrewlead': {
- 'label': 'Assistant Lead',
- 'dashboard': ['punchclock','fleet'],
- 'admin': []
- },
- 'crewlead': {
- 'label': 'Crew Lead',
- 'dashboard': ['punchclock','fleet','activecrew'],
- 'admin': []
- },
- 'developer': {
- 'label': 'Web Developer',
- 'dashboard': ['punchclock','fleet','activecrew'],
- 'admin': ['agreements','reports','users']
- },
- 'projectmanager': {
- 'label': 'Project Manager',
- 'dashboard': ['punchclock','fleet','activecrew'],
- 'admin': ['agreements','reports','users']
- },
- 'accounting': {
- 'label': 'Accountant',
- 'dashboard': ['punchclock','fleet','activecrew'],
- 'admin': ['agreements','reports','users']
+crew = {
+ '_id':1,
+ 'label': 'Crew',
+ 'dashboard': ['punchclock'],
+ 'admin': []
}
-}
+
+alead = {
+ '_id':2,
+ 'label': 'Assistant Lead',
+ 'dashboard': ['punchclock','fleet'],
+ 'admin': []
+ }
+
+lead = {
+ '_id':3,
+ 'label': 'Crew Lead',
+ 'dashboard': ['punchclock','fleet','activeusers'],
+ 'admin': []
+ }
+
+developer = {
+ '_id':4,
+ 'label': 'Web Developer',
+ 'dashboard': ['punchclock','fleet','activeusers'],
+ 'admin': ['agreements','reports','users','roles']
+ }
+
+manager = {
+ '_id':5,
+ 'label': 'Project Manager',
+ 'dashboard': ['punchclock','fleet','activeusers'],
+ 'admin': ['agreements','reports','users','roles']
+ }
+
+accountant = {
+ '_id':6,
+ 'label': 'Accountant',
+ 'dashboard': ['punchclock','fleet','activeusers'],
+ 'admin': ['agreements','reports','users']
+ }
+
# Insert documents
user_collection.insert_many([user1, user2])
@@ -190,7 +200,7 @@ time_collection.insert_many([time1, time2])
fleet_collection.insert_many([fleet1, fleet2])
agreement_collection.insert_many([agreement1, agreement2])
projects_collection.insert_many([projects1, projects2])
-permissions_collection.insert_one(roles)
+permissions_collection.insert_many([crew,alead,lead,developer,manager,accountant])
# Print seeded data
for x in user_collection.find():