diff --git a/app/admin/views.py b/app/admin/views.py
index fe04ad19a63385adc7e77f4c48c76d2a408b5bfe..61a6b3499aa245878d910606c0a001fe9f568bda 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -2,9 +2,9 @@ from flask import abort, flash, redirect, render_template, url_for
 from flask_login import current_user, login_required
 
 from . import admin
-from forms import DepartmentForm, RoleForm
+from forms import DepartmentForm, EmployeeAssignForm, RoleForm
 from .. import db
-from ..models import Department, Role
+from ..models import Department, Employee, Role
 
 def check_admin():
     """
@@ -191,3 +191,45 @@ def delete_role(id):
     return redirect(url_for('admin.list_roles'))
 
     return render_template(title="Delete Role")
+
+# Employee Views
+@admin.route('/employees')
+@login_required
+def list_employees():
+    """
+    List all employees
+    """
+    check_admin()
+
+    employees = Employee.query.all()
+    return render_template('admin/employees/employees.html',
+                           employees=employees, title='Employees')
+
+@admin.route('/employees/assign/<int:id>', methods=['GET', 'POST'])
+@login_required
+def assign_employee(id):
+    """
+    Assign a department and a role to an employee
+    """
+    check_admin()
+
+    employee = Employee.query.get_or_404(id)
+
+    # prevent admin from being assigned a department or role
+    if employee.is_admin:
+        abort(403)
+
+    form = EmployeeAssignForm(obj=employee)
+    if form.validate_on_submit():
+        employee.department = form.department.data
+        employee.role = form.role.data
+        db.session.add(employee)
+        db.session.commit()
+        flash('You have successfully assigned a department and role.')
+
+        # redirect to the roles page
+        return redirect(url_for('admin.list_employees'))
+
+    return render_template('admin/employees/employee.html',
+                           employee=employee, form=form,
+                           title='Assign Employee')