public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); //get user User user = HttpContext.Current.Session["User"] as User; //if user not exists if (user == null) { filterContext.Result = new RedirectResult("/home"); return; } //get token var token = HttpContext.Current.Request.RequestContext.RouteData.DataTokens; //get routeValues var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values; //get action string action = routeValues.ContainsKey("action") ? (string)routeValues["action"] : string.Empty; //get controller string controller = routeValues.ContainsKey("controller") ? (string)routeValues["controller"] : string.Empty; //get area string area = token.ContainsKey("area") ? (string)token["area"] : string.Empty; ClassSurveyDbContext db = new ClassSurveyDbContext(); //check to authorize user bool check = db.UserRoles.Any(s => s.Position == user.Position && s.Area == area && s.Controller == controller && s.Action == action); if (!check) { //if not match the roles, cant get in the page -> redirect to Not Authorize filterContext.Result = new RedirectResult("/notauthorized"); return; } }
//get data to above function public bool ImportData(out int count, ExcelPackage package) { count = 0; var result = false; try { //data start at column 1 and row 2 int startColumn = 1; int startRow = 2; ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; object data = null; //get DB ClassSurveyDbContext db = new ClassSurveyDbContext(); do { data = worksheet.Cells[startRow, startColumn].Value; //get Username object Username = worksheet.Cells[startRow, startColumn + 1].Value; //get password object Password = worksheet.Cells[startRow, startColumn + 2].Value; //get Fullname object Fullname = worksheet.Cells[startRow, startColumn + 3].Value; //get Email object Email = worksheet.Cells[startRow, startColumn + 4].Value; //get ClassByGrade object ClassByGrade = worksheet.Cells[startRow, startColumn + 5].Value; if (data != null) { var isImported = SaveStudent(Username.ToString(), Password.ToString(), Fullname.ToString() , Email.ToString(), ClassByGrade.ToString(), db); if (isImported) { count++; result = true; } } startRow++; } while (data != null); } catch (Exception) { throw; } return(result); }
//get data for above function public bool ImportData(out int count, ExcelPackage package) { var result = false; count = 0; try { //teacher info start at column 1 and row 2 in file excel int startColumn = 1; int startRow = 2; ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; object data = null; ClassSurveyDbContext db = new ClassSurveyDbContext(); do { data = worksheet.Cells[startRow, startColumn].Value; //get username object Username = worksheet.Cells[startRow, startColumn + 1].Value; //get password object Password = worksheet.Cells[startRow, startColumn + 2].Value; //get teacher name object Name = worksheet.Cells[startRow, startColumn + 3].Value; //get email object Email = worksheet.Cells[startRow, startColumn + 4].Value; //if exists data if (data != null) { var isImported = SaveTeacher(Username.ToString(), Password.ToString(), Name.ToString(), Email.ToString(), db); if (isImported) { count++; result = true; } } startRow++; } while (data != null); } catch (Exception) { throw; } return(result); }
//check if we can save new teachers public bool SaveTeacher(string username, string password, string name, string email, ClassSurveyDbContext db) { var result = false; try { //if teacher not exists in system before //just add new teachers when they dont exist in system if (db.Teachers.Where(x => x.Username.Equals(username)).Count() == 0) { var teacher = new Teacher(); teacher.Username = username; //hash password before adding teacher.Password = HashPassword.ComputeSha256Hash(password); teacher.TeacherName = name; teacher.Email = email; db.Teachers.Add(teacher); db.SaveChanges(); int id = db.Teachers.Max(x => x.Id); //add new user User user = new User() { Username = username, Password = HashPassword.ComputeSha256Hash(password), Position = "Teacher", TeacherId = id }; db.Users.Add(user); db.SaveChanges(); result = true; } } catch (Exception) { throw; } return(result); }
//get data to above function public bool ImportData(out int count, out int successNumber, ExcelPackage excel) { count = 0; successNumber = 0; var result = false; try { //add student, student info in the file starts at column 1 and row 12 int startColumn = 1; int startRow = 12; ExcelWorksheet worksheet = excel.Workbook.Worksheets[1]; ClassSurveyDbContext db = new ClassSurveyDbContext(); object data = null; //C7: teacherName object teacherName = worksheet.Cells[7, 3].Value; //C10: ClassName object className = worksheet.Cells[10, 3].Value; //C9: ClassCode object classCode = worksheet.Cells[9, 3].Value; //F9: Number of degrees object numberOfDegrees = worksheet.Cells[9, 6].Value; //add data if (!db.Classes.Any(x => x.ClassCode.ToLower().Equals(classCode.ToString().ToLower()))) { //new class Class @class = new Class(); @class.ClassName = className.ToString(); @class.ClassCode = classCode.ToString(); @class.Semester = 1; @class.NumberOfDegrees = int.Parse(numberOfDegrees.ToString()); db.Classes.Add(@class); db.SaveChanges(); //class Id int classId = db.Classes.Max(c => c.Id); //teacher Id int teacherId = db.Teachers.FirstOrDefault(t => t.TeacherName.ToLower() .Equals(teacherName.ToString().ToLower())).Id; do { data = worksheet.Cells[startRow, startColumn].Value; //get student name object studentName = worksheet.Cells[startRow, startColumn + 2].Value; //get student code object studentCode = worksheet.Cells[startRow, startColumn + 1].Value; //get class by grade object classByGrade = worksheet.Cells[startRow, startColumn + 4].Value; //get username string username = worksheet.Cells[startRow, startColumn + 1].Value.ToString(); startRow++; //if data exists if (data != null) { //get students in that class count++; Student student = db.Students.FirstOrDefault(s => s.Username.Trim() .Equals(username.Trim())); if (student == null) { continue; } if (student.StudentCode == null) { student.StudentCode = username; } StudentClass studentClass = new StudentClass(); studentClass.StudentId = student.Id; studentClass.TeacherId = teacherId; studentClass.ClassId = classId; db.StudentClasses.Add(studentClass); db.SaveChanges(); successNumber++; result = true; } } while (data != null); } } catch (Exception) { } return(result); }
//check ability to save new student from excel public bool SaveStudent(string username, string password, string fullname, string email, string classbygrade, ClassSurveyDbContext db) { var result = false; try { //save student //if students exist before, then not import again //just import new student not exists in system if (db.Students.Where(x => x.Username.Equals(username)).Count() == 0) { var student = new Student(); student.Username = username; //hash password before adding student.Password = HashPassword.ComputeSha256Hash(password); student.StudentCode = username; student.StudentName = fullname; student.Email = email; student.ClassByGrade = classbygrade; db.Students.Add(student); db.SaveChanges(); int id = db.Students.Max(x => x.Id); //add new user User user = new User() { Username = username, Password = HashPassword.ComputeSha256Hash(password), Position = "Student", StudentId = id }; db.Users.Add(user); db.SaveChanges(); result = true; } } catch (Exception) { throw; } return(result); }