private void BindBoxes() { FileSystem fs = new FileSystem(Globals.CurrentIdentity); //Get perms CFilePermission.FilePermissionList perms = fs.GetPermissions( fs.GetFile(FileID), Convert.ToInt32(ddlPrins.SelectedItem.Value)); chkRead.Checked = chkWrite.Checked = chkDelete.Checked = false; foreach (CFilePermission perm in perms) { if (perm.Grant) { if (perm.Action == FileAction.READ) { chkRead.Checked = true; } if (perm.Action == FileAction.WRITE) { chkWrite.Checked = true; } if (perm.Action == FileAction.DELETE) { chkDelete.Checked = true; } } } }
/// <summary> /// Private functionality to override admin security check /// </summary> private void SetPermissionsInt(CFile file, CFilePermission.FilePermissionList perms) { foreach (CFilePermission perm in perms) { m_dp.UpdateFilePermission(file, perm); } }
private int CommitTestSource(AutoEvaluation eval, IExternalSource zone) { FileSystem fs = new FileSystem(m_ident); //Make sure toplevel zone directory exists CFile zonedir = fs.GetFile(@"c:\zones"); if (null == zonedir) { zonedir = fs.CreateDirectory(@"c:\zones", true, null); } //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(eval.CourseID, true, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } //Create zone directory string zpath = @"c:\zones\" + eval.ID; CFile ezonedir; if (null == (ezonedir = fs.GetFile(zpath))) { ezonedir = fs.CreateDirectory(zpath, false, perms); ezonedir.Alias = eval.Name; ezonedir.SpecType = CFile.SpecialType.TEST; fs.UpdateFileInfo(ezonedir, false); } fs.ImportData(zpath, zone, false, true); //Import the data return(ezonedir.ID); }
/// <summary> /// Set permissions for a given file /// </summary> public void SetPermissions(CFile file, CFilePermission perm) { CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); perms.Add(perm); SetPermissions(file, perms); }
/// <summary> /// Set permissions for a given file /// </summary> public void SetPermissions(CFile file, CFilePermission.FilePermissionList perms) { //Authorize if (!Authorize(file, FileAction.ADMIN)) { throw new FileOperationException("Permission denied for action: ADMIN"); } SetPermissionsInt(file, perms); }
/// <summary> /// Create an assignment /// </summary> public int Create(int courseID, string creator, string desc, DateTime duedate) { //Check perm Authorize(courseID, Permission.COURSE, "createasst", courseID, null); Assignment asst = new Assignment(); asst.CourseID = courseID; asst.Creator = creator; asst.Description = desc; asst.DueDate = duedate; asst.Format = Assignment.DEFAULT_FORMAT; //Create m_dp.CreateAssignment(asst); //Setup default permissions CreatePermissions(asst.ID, courseID, Permission.ASSIGNMENT); //Setup default file permissions Courses courseda = new Courses(m_ident); CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = courseda.GetTypedRoles(courseID, true, null); CourseRole.CourseRoleList stu = courseda.GetTypedRoles(courseID, false, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } foreach (CourseRole role in stu) { perms.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); } //Create content area FileSystem fs = new FileSystem(m_ident); CFile cdir = fs.CreateDirectory(@"c:\acontent\" + asst.ID, false, perms, false); asst.ContentID = cdir.ID; Update(asst); //Log Log("Created assignment: " + desc, asst.ID); return(asst.ID); }
private void cmdUpdate_Click(object sender, System.EventArgs e) { CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); int principalID = Convert.ToInt32(ddlPrins.SelectedItem.Value); perms.Add(new CFilePermission(principalID, FileAction.READ, chkRead.Checked)); perms.Add(new CFilePermission(principalID, FileAction.WRITE, chkWrite.Checked)); perms.Add(new CFilePermission(principalID, FileAction.DELETE, chkDelete.Checked)); FileSystem fs = new FileSystem(Globals.CurrentIdentity); try { fs.SetPermissions(fs.GetFile(FileID), perms); } catch (CustomException er) { PageError(er.Message); } BindBoxes(); }
/// <summary> /// Get permissions for a given file /// </summary> public CFilePermission.FilePermissionList GetPermissions(CFile file, int principalID) { //Check perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); if (Authorize(principalID, file, FileAction.READ, null)) { perms.Add(new CFilePermission(principalID, FileAction.READ, true)); } if (Authorize(principalID, file, FileAction.WRITE, null)) { perms.Add(new CFilePermission(principalID, FileAction.WRITE, true)); } if (Authorize(principalID, file, FileAction.DELETE, null)) { perms.Add(new CFilePermission(principalID, FileAction.DELETE, true)); } return(perms); }
/// <summary> /// Load submission directory with new files, updates time /// </summary> public bool Update(Submission sub, IExternalSource files) { FileSystem fs = new FileSystem(m_ident); bool markcmp, unmarkcmp, defunct; //Get old sub Components.Submission oldsub = GetInfo(sub.ID); markcmp = (oldsub.Status == Components.Submission.UNGRADED && sub.Status == Components.Submission.GRADED); unmarkcmp = (oldsub.Status == Components.Submission.GRADED && sub.Status == Components.Submission.UNGRADED); defunct = (oldsub.Status != Components.Submission.DEFUNCT && sub.Status == Components.Submission.DEFUNCT); //Make sure toplevel zone directory exists CFile subdir = fs.GetFile(@"c:\subs"); if (null == subdir) subdir = fs.CreateDirectory(@"c:\subs", true, null, false); //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); int courseID = new Assignments(m_ident).GetInfo(sub.AsstID).CourseID; CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(courseID, true, null); foreach (CourseRole role in staff) perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); perms.AddRange(CFilePermission.CreateOprFullAccess(sub.PrincipalID)); //Create zone directory CFile esubdir; string zpath = @"c:\subs\" + sub.ID; if (null == (esubdir = fs.GetFile(zpath))) { esubdir = fs.CreateDirectory(zpath, false, perms, false); esubdir.SpecType = CFile.SpecialType.SUBMISSION; string name = new Principals(m_ident).GetInfo(sub.PrincipalID).Name; esubdir.Alias = String.Format("{0}: {1}", name, GetNextSubmission(sub.AsstID, sub.PrincipalID)); fs.UpdateFileInfo(esubdir, false); } //Update sub entry sub.LocationID = esubdir.ID; m_dp.UpdateSubmission(sub); //Load files try { fs.ImportData(zpath, files, false, false); //Import the data } catch (Exception) { throw new DataAccessException("Invalid external file source. This means the system does " + "not understand how to extract files from the source. Please create a valid source"); } //Verify submission structure VerifyFormat(sub.AsstID, zpath); //Log if (markcmp) Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " completed", sub.ID); else if (unmarkcmp) Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " incomplete", sub.ID); else if (defunct) Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " defunct", sub.ID); return true; }
/// <summary> /// Create an assignment /// </summary> public int Create(int courseID, string creator, string desc, DateTime duedate) { //Check perm Authorize(courseID, Permission.COURSE, "createasst", courseID, null); Assignment asst = new Assignment(); asst.CourseID = courseID; asst.Creator = creator; asst.Description = desc; asst.DueDate = duedate; asst.Format = Assignment.DEFAULT_FORMAT; //Create m_dp.CreateAssignment(asst); //Setup default permissions CreatePermissions(asst.ID, courseID, Permission.ASSIGNMENT); //Setup default file permissions Courses courseda = new Courses(m_ident); CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = courseda.GetTypedRoles(courseID, true, null); CourseRole.CourseRoleList stu = courseda.GetTypedRoles(courseID, false, null); foreach (CourseRole role in staff) perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); foreach (CourseRole role in stu) perms.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); //Create content area FileSystem fs = new FileSystem(m_ident); CFile cdir = fs.CreateDirectory(@"c:\acontent\" + asst.ID, false, perms, false); asst.ContentID = cdir.ID; Update(asst); //Log Log("Created assignment: " + desc, asst.ID); return asst.ID; }
/// <summary> /// Create the course /// </summary> public bool Create(string name, string number, string instructor) { Course course = new Course(); //TODO: Verify these values course.Name = name; course.Number = number; //Create course m_dp.CreateCourse(course); //Get all data course = GetInfo(course.ID); //Define default roles CourseRole role = new CourseRole(); role.CourseID = course.ID; role.Name = "Student"; role.Staff = false; m_dp.CreateCourseRole(role); role.Name = "TA"; role.Staff = true; m_dp.CreateCourseRole(role); role.Name = "Instructor"; role.Staff = true; m_dp.CreateCourseRole(role); //Assign filesys permissions CourseRole student = GetRoleInfo("Student", course.ID); CourseRole ta = GetRoleInfo("TA", course.ID); CourseRole ins = GetRoleInfo("Instructor", course.ID); CFilePermission.FilePermissionList full = new CFilePermission.FilePermissionList(); full.AddRange(CFilePermission.CreateFullAccess(ta.PrincipalID)); full.AddRange(CFilePermission.CreateFullAccess(ins.PrincipalID)); full.Add(new CFilePermission(student.PrincipalID, FileAction.READ, true)); //Create content area FileSystem fs = new FileSystem(m_ident); string cpath = @"c:\ccontent\" + course.ID; CFile cdir = fs.CreateDirectory(cpath, false, full); course.ContentID = cdir.ID; Update(course); CFile ldir = fs.CreateDirectory(cpath + @"\" + "lnotes", false, null); ldir.Alias = "Lecture Notes"; fs.UpdateFileInfo(ldir, false); //Put operator in course temporarily m_dp.CreateCourseMember(m_ident.Name, course.ID, "Instructor", null); //Assign course perms CreatePermissions(course.ID, course.ID, Permission.COURSE); if (instructor != m_ident.Name) { //Add instructor AddUser(instructor, "Instructor", course.ID, null); //Take operator out RemoveUser(m_ident.Name, course.ID); } return(true); }
/// <summary> /// Load submission directory with new files, updates time /// </summary> public bool Update(Submission sub, IExternalSource files) { FileSystem fs = new FileSystem(m_ident); bool markcmp, unmarkcmp, defunct; //Get old sub Components.Submission oldsub = GetInfo(sub.ID); markcmp = (oldsub.Status == Components.Submission.UNGRADED && sub.Status == Components.Submission.GRADED); unmarkcmp = (oldsub.Status == Components.Submission.GRADED && sub.Status == Components.Submission.UNGRADED); defunct = (oldsub.Status != Components.Submission.DEFUNCT && sub.Status == Components.Submission.DEFUNCT); //Make sure toplevel zone directory exists CFile subdir = fs.GetFile(@"c:\subs"); if (null == subdir) { subdir = fs.CreateDirectory(@"c:\subs", true, null, false); } //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); int courseID = new Assignments(m_ident).GetInfo(sub.AsstID).CourseID; CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(courseID, true, null); foreach (CourseRole role in staff) { perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); } perms.AddRange(CFilePermission.CreateOprFullAccess(sub.PrincipalID)); //Create zone directory CFile esubdir; string zpath = @"c:\subs\" + sub.ID; if (null == (esubdir = fs.GetFile(zpath))) { esubdir = fs.CreateDirectory(zpath, false, perms, false); esubdir.SpecType = CFile.SpecialType.SUBMISSION; string name = new Principals(m_ident).GetInfo(sub.PrincipalID).Name; esubdir.Alias = String.Format("{0}: {1}", name, GetNextSubmission(sub.AsstID, sub.PrincipalID)); fs.UpdateFileInfo(esubdir, false); } //Update sub entry sub.LocationID = esubdir.ID; m_dp.UpdateSubmission(sub); //Load files try { fs.ImportData(zpath, files, false, false); //Import the data } catch (Exception) { throw new DataAccessException("Invalid external file source. This means the system does " + "not understand how to extract files from the source. Please create a valid source"); } //Verify submission structure VerifyFormat(sub.AsstID, zpath); //Log if (markcmp) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " completed", sub.ID); } else if (unmarkcmp) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " incomplete", sub.ID); } else if (defunct) { Log("User [" + m_ident.Name + "] marked submission " + esubdir.Alias + " defunct", sub.ID); } return(true); }
/// <summary> /// Create a new directory /// </summary> public CFile CreateDirectory(string fullpath, bool ronly, CFilePermission.FilePermissionList perms, bool modupdate) { CFile file = new CFile(); fullpath = PurifyPath(fullpath); string dirname = Path.GetDirectoryName(fullpath); if (dirname == null || dirname.Length == 0) { file.Path = fullpath; } else { file.Path = dirname; } string filename = Path.GetFileName(fullpath); if (filename == null || filename.Length == 0) { file.Name = fullpath; } else { file.Name = filename; } file.Type = CFile.FileType.DIRECTORY; file.ReadOnly = ronly; //Check name if (!ValidateFileName(file.Name)) { throw new FileOperationException("Invalid file name: " + file.Name); } //Check to see if a file exists here if (GetFile(file.FullPath) != null) { throw new FileExistsException("Create file failed: Directory already exists"); } //Check to make sure parent exists CFile par = GetFile(file.Path); if (par == null && file.Path != @"c:\") { CreateDirectory(file.Path, ronly, null, modupdate); } m_dp.CreateFile(file); if (perms != null) { SetPermissionsInt(file, perms); } //Get parent and update times par = GetParent(file); if (modupdate && par != null && par.FullPath != @"c:\") { PercolateModified(par, DateTime.Now); } return(file); }
private int CommitTestSource(AutoEvaluation eval, IExternalSource zone) { FileSystem fs = new FileSystem(m_ident); //Make sure toplevel zone directory exists CFile zonedir = fs.GetFile(@"c:\zones"); if (null == zonedir) zonedir = fs.CreateDirectory(@"c:\zones", true, null); //Build file perms CFilePermission.FilePermissionList perms = new CFilePermission.FilePermissionList(); CourseRole.CourseRoleList staff = new Courses(m_ident).GetTypedRoles(eval.CourseID, true, null); foreach (CourseRole role in staff) perms.AddRange(CFilePermission.CreateFullAccess(role.PrincipalID)); //Create zone directory string zpath = @"c:\zones\" + eval.ID; CFile ezonedir; if (null == (ezonedir = fs.GetFile(zpath))) { ezonedir = fs.CreateDirectory(zpath, false, perms); ezonedir.Alias = eval.Name; ezonedir.SpecType = CFile.SpecialType.TEST; fs.UpdateFileInfo(ezonedir, false); } fs.ImportData(zpath, zone, false, true); //Import the data return ezonedir.ID; }
/// <summary> /// Recreate the file permissions table /// </summary> public void RecoverBaseFilePermissions() { //Get all submissions Components.Submission.SubmissionList subs = new Submissions(m_ident).GetAll(); Assignments asstda = new Assignments(m_ident); Courses courseda = new Courses(m_ident); CFilePermission.FilePermissionList full; foreach (Components.Submission sub in subs) { CFile subdir = GetFile(sub.LocationID); int courseID = asstda.GetInfo(sub.AsstID).CourseID; //Give staff access CourseRole.CourseRoleList staff = courseda.GetTypedRoles(courseID, true, null); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(subdir, full); } //Give sub principal access full = CFilePermission.CreateOprFullAccess(sub.PrincipalID); SetPermissionsInt(subdir, full); } //Do content Course.CourseList courses = courseda.GetAll(); foreach (Course course in courses) { CFile cont = GetFile(course.ContentID); //Give staff access CourseRole.CourseRoleList staff = courseda.GetTypedRoles(course.ID, true, null); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(cont, full); } //Give students read access CourseRole.CourseRoleList stu = courseda.GetTypedRoles(course.ID, false, null); foreach (CourseRole role in stu) { full = new CFilePermission.FilePermissionList(); full.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); SetPermissionsInt(cont, full); } //Give staff and stuaccess to asst content Assignment.AssignmentList assts = courseda.GetAssignments(course.ID); foreach (Assignment asst in assts) { CFile acont = GetFile(asst.ContentID); foreach (CourseRole role in staff) { full = CFilePermission.CreateFullAccess(role.PrincipalID); SetPermissionsInt(acont, full); } foreach (CourseRole role in stu) { full = new CFilePermission.FilePermissionList(); full.Add(new CFilePermission(role.PrincipalID, FileAction.READ, true)); SetPermissionsInt(acont, full); } } } }
/// <summary> /// Create the course /// </summary> public bool Create(string name, string number, string instructor) { Course course = new Course(); //TODO: Verify these values course.Name = name; course.Number = number; //Create course m_dp.CreateCourse(course); //Get all data course = GetInfo(course.ID); //Define default roles CourseRole role = new CourseRole(); role.CourseID = course.ID; role.Name = "Student"; role.Staff = false; m_dp.CreateCourseRole(role); role.Name = "TA"; role.Staff = true; m_dp.CreateCourseRole(role); role.Name = "Instructor"; role.Staff = true; m_dp.CreateCourseRole(role); //Assign filesys permissions CourseRole student = GetRoleInfo("Student", course.ID); CourseRole ta = GetRoleInfo("TA", course.ID); CourseRole ins = GetRoleInfo("Instructor", course.ID); CFilePermission.FilePermissionList full = new CFilePermission.FilePermissionList(); full.AddRange(CFilePermission.CreateFullAccess(ta.PrincipalID)); full.AddRange(CFilePermission.CreateFullAccess(ins.PrincipalID)); full.Add(new CFilePermission(student.PrincipalID, FileAction.READ, true)); //Create content area FileSystem fs = new FileSystem(m_ident); string cpath = @"c:\ccontent\" + course.ID; CFile cdir = fs.CreateDirectory(cpath, false, full); course.ContentID = cdir.ID; Update(course); CFile ldir = fs.CreateDirectory(cpath + @"\" + "lnotes", false, null); ldir.Alias = "Lecture Notes"; fs.UpdateFileInfo(ldir, false); //Put operator in course temporarily m_dp.CreateCourseMember(m_ident.Name, course.ID, "Instructor", null); //Assign course perms CreatePermissions(course.ID, course.ID, Permission.COURSE); if (instructor != m_ident.Name) { //Add instructor AddUser(instructor, "Instructor", course.ID, null); //Take operator out RemoveUser(m_ident.Name, course.ID); } return true; }
/// <summary> /// Create a new directory /// </summary> public CFile CreateDirectory(string fullpath, bool ronly, CFilePermission.FilePermissionList perms) { return(CreateDirectory(fullpath, ronly, perms, true)); }