Пример #1
0
        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;
                    }
                }
            }
        }
Пример #2
0
 /// <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);
     }
 }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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();
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
        /// <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;
        }
Пример #10
0
        /// <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;
        }
Пример #11
0
        /// <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);
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
        /// <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);
        }
Пример #14
0
        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;
        }
Пример #15
0
        /// <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);
                    }
                }
            }
        }
Пример #16
0
        /// <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;
        }
Пример #17
0
        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();
        }
Пример #18
0
 /// <summary>
 /// Create a new directory
 /// </summary>
 public CFile CreateDirectory(string fullpath, bool ronly, CFilePermission.FilePermissionList perms)
 {
     return(CreateDirectory(fullpath, ronly, perms, true));
 }