commit 140bfa802c23c591a7401a6e2cc38238862b8900
parent 5575f7bd9038ebad4773964eba8165d25ddece84
Author: Brennen T. Mazur <brennen@madis.cool>
Date: Sun, 12 Feb 2023 21:25:34 -0700
add user, roles, and permissions forms and layouts
Diffstat:
9 files changed, 186 insertions(+), 18 deletions(-)
diff --git a/app/forms.py b/app/forms.py
@@ -14,23 +14,40 @@ class LoginForm(FlaskForm):
class NewUserForm(FlaskForm):
fname = StringField('First Name', validators=[DataRequired()])
- mname = StringField('Middle Initial', validators=[DataRequired()])
+ mname = StringField('Middle Initial', validators=[DataRequired(),length(max=1)])
lname = StringField('Last Name', validators=[DataRequired()])
birthday = DateField('Birthday',validators=[DataRequired()])# Ought to change this to some validation for age range accepted
role = SelectField('Role',validators=[DataRequired()])
address = StringField('Address',validators=[DataRequired()])# Require some sort of validator for check...
branch = SelectField('Branch',validators=[DataRequired(),length(max=200)])
- phonenumber = TelField('Phonenumber',validators=[DataRequired()])# Require some sort of validator for check...
+ phonenumber = TelField('Phonenumber',validators=[DataRequired(),length(max=12)])# Require some sort of validator for check...
email = EmailField('Email',validators=[DataRequired()])# Require some sort of validator for check...
payPeriod = StringField('Pay Period Override',validators=[optional()])# May not need this at all?
payValue = FloatField('Pay Value Override',validators=[optional()])# Require some sort of validator for check...
- setActive = BooleanField('Active',validators=[optional()])# Require some sort of validator for check...
+ setActive = BooleanField('Active',default="checked")# Require some sort of validator for check...
createNewUser = SubmitField('Create New User')
class PunchclockWidget(FlaskForm):
- projectsSel = SelectField('Project', validators=[DataRequired()])
- #clockin = currenttime
- lunchBox = BooleanField('Lunch')
- perdiumBox = BooleanField('Perdium')
- # IFF user.role is_in(trusted_role[]) then allow lunch minute definition
- clockin = SubmitField('Clock In')
+ projectsSel = SelectField('Project', validators=[DataRequired()])
+ #clockin = currenttime
+ lunchBox = BooleanField('Lunch')
+ perdiumBox = BooleanField('Perdium')
+ # IFF user.role is_in(trusted_role[]) then allow lunch minute definition
+ clockin = SubmitField('Clock In')
+
+class NewRoleForm(FlaskForm):
+ rolename = StringField('Role Name', validators=[DataRequired()])
+
+class DashPermissionsForm(FlaskForm):# for each module make Boolean field. Gets passed to fn writing to permissions_collection SET MANUALLY CURRENTLY
+ punchclock = BooleanField('Punch Clock',default="checked")
+ activecrew = BooleanField('Active Crew List')
+ fleet = BooleanField('Fleet')
+ ###### End Modules #####
+ updaterole = SubmitField('Update')#Update to take role name for pass to write fn
+
+class AdmnPermissionsForm(FlaskForm):# for each module make Boolean field. Gets passed to fn writing to permissions_collection SET MANUALLY CURRENTLY
+ agreements = BooleanField('Agreements')
+ reports = BooleanField('Reports')
+ manageusers = BooleanField('Manage Users')
+ ###### End Modules #####
+ updaterole = SubmitField('Update')#Update to take role name for pass to write fn
diff --git a/app/routes.py b/app/routes.py
@@ -3,7 +3,7 @@ from app import app
from flask_pymongo import PyMongo
from flask_login import LoginManager
from flask import render_template, url_for, request, flash, redirect
-from app.forms import LoginForm, PunchclockWidget, NewUserForm
+from app.forms import LoginForm, PunchclockWidget, NewUserForm, AdmnPermissionsForm, DashPermissionsForm
from flask import request
from werkzeug.urls import url_parse
from werkzeug.security import generate_password_hash, check_password_hash
@@ -129,8 +129,15 @@ def hours():#userid goes into call to db to get user[] -> then returns formatted
@app.route("/admin/roles")
#@login_required
def roles():
+ admnform = AdmnPermissionsForm()
+ dashform = DashPermissionsForm()
+ return render_template('admin/roles/updateroles.html',dashform=dashform,admnform=admnform,ORGNAME=OrganizationName)
+
+@app.route("/admin/newuser")
+#@login_required
+def newuser():
form = NewUserForm()
- return render_template('admin/roles/index.html',form=form,ORGNAME=OrganizationName)
+ return render_template('admin/users/newuser.html',form=form,ORGNAME=OrganizationName)
@app.route("/admin/agreement")
@login_required
diff --git a/app/templates/admin/layout.html b/app/templates/admin/layout.html
@@ -9,7 +9,10 @@
<!--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 ['reports','agreements','roles'] %}
+
+
+<!-- for x in db.get_collection('permissions_collection').find_one(current_user.role) -->
+ {%- for x in ['reports','agreements','roles','users'] %}
{% include 'admin/'~x~'/widget.html' %}
{%- else-%}
{{ 'You do not have permission to access this page' }}
diff --git a/app/templates/admin/roles/updateroles.html b/app/templates/admin/roles/updateroles.html
@@ -0,0 +1,53 @@
+{% extends 'base.html' %}
+
+{% block title %}Current Activeated Users{% endblock %}
+
+{% block navigation %}<a id="navi" href="/admin"><div id="back"><Back</div></a>{% endblock %}
+
+{% block content %}
+
+<table>
+ <tr>
+ <th>User Role</th>
+ {% for field in dashform %}
+ <th>{{ field.label }}</th>
+ {% endfor %}
+ </tr>
+ <form action="" method="post" novalidate>
+ {{ dashform.hidden_tag() }}
+ {% for error in dashform.errors %}
+ <span style="color:red;">[{{ error }}]</span>
+ {% endfor %}
+ {% for role in ['Crew','Crew Lead','Project Manager','Developer','Accountant'] %}
+ <tr><td>{{ role }}</td>
+ {% for field in dashform %}
+ <td>{{ field }}</td>
+ {% endfor %}
+ </tr>
+ {% endfor %}
+ </form>
+</table>
+
+<table>
+ <tr>
+ <th>User Role</th>
+ {% for field in admnform %}
+ <th>{{ field.label }}</th>
+ {% endfor %}
+ </tr>
+ <form action="" method="post" novalidate>
+ {{ admnform.hidden_tag() }}
+ {% for error in admnform.errors %}
+ <span style="color:red;">[{{ error }}]</span>
+ {% endfor %}
+ {% for role in ['Crew','Crew Lead','Project Manager','Developer','Accountant'] %}
+ <tr><td>{{ role }}</td>
+ {% for field in admnform %}
+ <td>{{ field }}</td>
+ {% endfor %}
+ </tr>
+ {% endfor %}
+ </form>
+</table>
+
+{% endblock %}
diff --git a/app/templates/admin/roles/widget.html b/app/templates/admin/roles/widget.html
@@ -1,6 +1,6 @@
-<section class="permissions">
+<section class="admin-sidebar"><!-- did not change css tag yet... -->
<h3>Permissions by</h3>
- <input type="submit" value="Role">
+ <input type="submit" value="Roles">
<input type="submit" value="Employee">
- <input type="submit" value="Page"><!-- may not be necessary with role above... -->
+ <!-- <input type="submit" value="Page"> -->
</section>
diff --git a/app/templates/admin/users/inactiveusers.html b/app/templates/admin/users/inactiveusers.html
@@ -0,0 +1,27 @@
+{% extends 'base.html' %}
+
+{% block title %}Add new Employee{% endblock %}
+
+{% block navigation %}<a id="navi" href="/admin"><div id="back"><Back</div></a>{% endblock %}
+
+{% block content %}
+ <form action="" method="post" novalidate>
+ {{ form.hidden_tag() }}
+ {% for error in form.errors %}
+ <span style="color:red;">[{{ error }}]</span>
+ {% endfor %}
+ {{ form.fname.label }}{{ form.fname() }}<br>
+ {{ form.mname.label }}{{ form.mname(size=1) }}<br>
+ {{ form.lname.label }}{{ form.lname() }}<br>
+ {{ form.birthday.label }}{{ form.birthday() }}<br>
+ {{ form.role.label }}{{ form.role() }}<br>
+ {{ form.address.label }}{{ form.address() }}<br>
+ {{ form.branch.label }}{{ form.branch() }}<br>
+ {{ form.phonenumber.label }}{{ form.phonenumber() }}<br>
+ {{ form.email.label }}{{ form.email() }}<br>
+ {{ form.payPeriod.label }}{{ form.payPeriod() }}<br>
+ {{ form.payValue.label }}{{ form.payValue() }}<br>
+ {{ form.setActive() }}{{ form.setActive.label }}<br>
+ {{ form.createNewUser() }}
+ </form>
+{% endblock %}
diff --git a/app/templates/admin/users/newuser.html b/app/templates/admin/users/newuser.html
@@ -0,0 +1,27 @@
+{% extends 'base.html' %}
+
+{% block title %}Add new Employee{% endblock %}
+
+{% block navigation %}<a id="navi" href="/admin"><div id="back"><Back</div></a>{% endblock %}
+
+{% block content %}
+ <form action="" method="post" novalidate>
+ {{ form.hidden_tag() }}
+ {% for error in form.errors %}
+ <span style="color:red;">[{{ error }}]</span>
+ {% endfor %}
+ {{ form.fname.label }}{{ form.fname() }}<br>
+ {{ form.mname.label }}{{ form.mname(size=1) }}<br>
+ {{ form.lname.label }}{{ form.lname() }}<br>
+ {{ form.birthday.label }}{{ form.birthday() }}<br>
+ {{ form.role.label }}{{ form.role() }}<br>
+ {{ form.address.label }}{{ form.address() }}<br>
+ {{ form.branch.label }}{{ form.branch() }}<br>
+ {{ form.phonenumber.label }}{{ form.phonenumber() }}<br>
+ {{ form.email.label }}{{ form.email() }}<br>
+ {{ form.payPeriod.label }}{{ form.payPeriod() }}<br>
+ {{ form.payValue.label }}{{ form.payValue() }}<br>
+ {{ form.setActive() }}{{ form.setActive.label }}<br>
+ {{ form.createNewUser() }}
+ </form>
+{% endblock %}
diff --git a/app/templates/admin/users/widget.html b/app/templates/admin/users/widget.html
@@ -0,0 +1,6 @@
+<section class="admin-sidebar">
+ <h3>Users</h3>
+ <input type="submit" value="Active"> <!--sends active tag to route changes available users in dropdown -->
+ <input type="submit" value="Inactive"> <!-- sends inactive tag to route for available users dropdown -->
+ <a href="{{ url_for('newuser') }}"><input type="submit" value="New"></a> <!-- separate newuser.html pg? -->
+</section>
diff --git a/seeds.py b/seeds.py
@@ -152,10 +152,38 @@ projects2 = {
# Permissions documents (only needs array list of str for each 'service')
roles = {
- 'punchclock': ['Crew','Crew Lead', 'Project Manager','Developer'],
- 'fleet': ['Crew Lead', 'Project Manager'],
- 'admin': ['Project Manager', 'Developer']
+ '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']
+ }
}
+
# Insert documents
user_collection.insert_many([user1, user2])
time_collection.insert_many([time1, time2])