示例#1
0
        private void BindData()
        {
            Users   userda   = new Users(Globals.CurrentIdentity);
            Courses courseda = new Courses(Globals.CurrentIdentity);
            int     courseID = GetCourseID();

            User user = userda.GetInfo(GetUsername(), null);

            txtFirst.Text = user.FirstName; txtLast.Text = user.LastName;
            txtEmail.Text = user.Email;

            double total = courseda.GetTotalPoints(courseID);
            double userp = userda.GetCoursePoints(user.UserName, courseID);

            lblTotal.Text = String.Format("{0} / {1} ({2}%)",
                                          userp, total, Math.Round((userp / total) * 100.0, 2));

            dgReport.DataSource = courseda.GetAssignments(courseID);
            dgReport.DataBind();

            CourseRole.CourseRoleList roles = courseda.GetRoles(courseID, null);
            CourseRole urole = courseda.GetRole(user.UserName, courseID, null);

            ddlRoles.Items.Clear();
            foreach (CourseRole role in roles)
            {
                ListItem item = new ListItem(role.Name, role.PrincipalID.ToString());
                if (role.PrincipalID == urole.PrincipalID)
                {
                    item.Selected = true;
                }
                ddlRoles.Items.Add(item);
            }
        }
示例#2
0
        private void dgRoles_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            Label      lblType, lblName;
            LinkButton lnkPermissions;

            if (null != (lblType = (Label)e.Item.FindControl("lblType")))
            {
                lblName        = (Label)e.Item.FindControl("lblName");
                lnkPermissions = (LinkButton)e.Item.FindControl("lnkPermissions");
                Principal prin = (Principal)e.Item.DataItem;
                if (prin is User)
                {
                    User user = prin as User;
                    lblType.Text = "User";
                    lblName.Text = user.FullName + " (" + user.UserName + ")";
                }
                else
                {
                    CourseRole role = prin as CourseRole;
                    lblType.Text = "Role"; lblType.Font.Bold = true;
                    lblName.Text = prin.Name; lblName.Font.Bold = true;
                    if (!role.Staff)
                    {
                        lnkPermissions.Enabled = false;
                    }
                }
            }
        }
示例#3
0
        public async Task <bool> ToggleRole(string courseId, string userId, CourseRole role, string grantedById, string comment)
        {
            courseId = courseId.ToLower();
            var  userRole = db.UserRoles.Where(x => x.UserId == userId && x.Role == role && x.CourseId == courseId).ToList().LastOrDefault();
            bool isEnabled;

            if (userRole != null && (!userRole.IsEnabled.HasValue || userRole.IsEnabled.Value))
            {
                isEnabled = false;
            }
            else
            {
                isEnabled = true;
            }
            var record = new UserRole
            {
                UserId      = userId,
                CourseId    = courseId,
                Role        = role,
                IsEnabled   = isEnabled,
                GrantedById = grantedById,
                GrantTime   = DateTime.Now.ToUniversalTime(),
                Comment     = comment
            };

            db.UserRoles.Add(record);

            await db.SaveChangesAsync();

            return(isEnabled);
        }
示例#4
0
        public async Task <ActionResult> ToggleRole(string courseId, string userId, CourseRole role)
        {
            var comment       = Request.Form["comment"];
            var currentUserId = User.Identity.GetUserId();
            var isCourseAdmin = User.HasAccessFor(courseId, CourseRole.CourseAdmin);

            if ((userManager.FindById(userId) == null || userId == currentUserId) && (!isCourseAdmin || role == CourseRole.CourseAdmin) && !User.IsSystemAdministrator())
            {
                return(Json(new { status = "error", message = "Вы не можете изменить эту роль у самих себя." }));
            }

            var canAddInstructors = coursesRepo.HasCourseAccess(currentUserId, courseId, CourseAccessType.AddAndRemoveInstructors);

            if (!isCourseAdmin && !canAddInstructors)
            {
                return(Json(new { status = "error", message = "У вас нет прав назначать преподавателей или тестеров. Это могут делать только администраторы курса и преподаватели со специальными правами." }));
            }

            if (!isCourseAdmin && role == CourseRole.CourseAdmin)
            {
                return(Json(new { status = "error", message = "Вы не можете назначать администраторов курса. Это могут делать только другие администраторы курса." }));
            }

            var enabledRole = await userRolesRepo.ToggleRole(courseId, userId, role, currentUserId, comment);

            if (enabledRole && (role == CourseRole.Instructor || role == CourseRole.CourseAdmin))
            {
                await NotifyAboutNewInstructor(courseId, userId, currentUserId);
            }

            return(Json(new { status = "ok", role = role.ToString() }));
        }
示例#5
0
        private void RefreshProc()
        {
            // First login
            AuthenticationServiceClient authClient = new AuthenticationServiceClient();
            string authToken = null;

            try
            {
                authToken = authClient.ValidateUser(m_user, m_pass);
            }
            catch (System.ServiceModel.EndpointNotFoundException)
            {
                authClient.Close();
                m_onComplete(this, new OSBLEStateEventArgs(false,
                                                           "Could not connect to the OSBLE server. " +
                                                           "Please contact support if this problem persists."));
                return;
            }
            authClient.Close();
            authClient = null;

            if (string.IsNullOrEmpty(authToken))
            {
                m_onComplete(this, new OSBLEStateEventArgs(false,
                                                           "Could not log in to OSBLE. " +
                                                           "Please check your user name and password."));
                return;
            }

            // Now get a list of courses
            OsbleServiceClient osc = new OsbleServiceClient();

            m_courses = osc.GetCourses(authToken);

            // Make sure we got some courses
            if (null == m_courses || 0 == m_courses.Length)
            {
                m_onComplete(this, new OSBLEStateEventArgs(false,
                                                           "No courses were found for this user."));
                return;
            }

            // Go through the courses and find out this user's role
            List <Course> canBeGraded = new List <Course>();

            foreach (Course c in m_courses)
            {
                CourseRole cr = osc.GetCourseRole(c.ID, authToken);
                if (cr.CanGrade)
                {
                    canBeGraded.Add(c);
                }
            }
            m_courses = canBeGraded.ToArray();

            // Success if we made it this far
            m_onComplete(this, new OSBLEStateEventArgs(true, string.Empty));
        }
示例#6
0
 public UserFeedSetting(UserFeedSetting other) : this()
 {
     this.Id = other.Id;
     this.EventFilterSettings = other.EventFilterSettings;
     this.UserId       = other.UserId;
     this.SettingsDate = other.SettingsDate;
     this.CourseFilter = -1;
     this.CourseRole   = CourseRole.Student;
 }
示例#7
0
		public static bool HasAccessFor(this IPrincipal principal, string courseId, CourseRole minAccessLevel)
		{
			if (principal.IsSystemAdministrator())
				return true;

			var courseRole = principal.GetAllRoles().FirstOrDefault(t => string.Equals(t.Item1, courseId, StringComparison.OrdinalIgnoreCase));

			return courseRole?.Item2 <= minAccessLevel;
		}
示例#8
0
		public List<string> GetListOfUsersWithCourseRole(CourseRole? courseRole, string courseId)
		{
			if (!courseRole.HasValue)
				return null;

			var usersQuery = db.UserRoles.Where(userRole => userRole.Role == courseRole);
			if (!string.IsNullOrEmpty(courseId))
				usersQuery = usersQuery.Where(userRole => userRole.CourseId == courseId);
			return usersQuery.Select(user => user.UserId).Distinct().ToList();
		}
示例#9
0
        public async Task <ActionResult> ToggleRole(string courseId, string userId, CourseRole role)
        {
            if (userManager.FindById(userId) == null || userId == User.Identity.GetUserId())
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            await userRolesRepo.ToggleRole(courseId, userId, role);

            return(Content(role.ToString()));
        }
示例#10
0
        public static bool HasAccessFor(this IPrincipal principal, string courseId, CourseRole minAccessLevel)
        {
            if (principal.IsSystemAdministrator())
            {
                return(true);
            }

            var courseRole = principal.GetAllRoles().FirstOrDefault(t => string.Equals(t.Item1, courseId, StringComparison.OrdinalIgnoreCase));

            return(courseRole?.Item2 <= minAccessLevel);
        }
示例#11
0
		public static bool HasAccess(this IPrincipal principal, CourseRole minAccessLevel)
		{
			if (principal.IsSystemAdministrator())
				return true;

			var roles = principal.GetAllRoles().Select(t => t.Item2).ToList();

			if (!roles.Any())
				return false;
			return roles.Min() <= minAccessLevel;
		}
示例#12
0
		public static bool HasAccessFor(this IPrincipal principal, string courseId, CourseRole minAccessLevel)
		{
			if (principal.IsSystemAdministrator())
				return true;

			var courseRole = principal.GetAllRoles().FirstOrDefault(t => t.Item1 == courseId);
			if (courseRole == null)
				return false;

			return courseRole.Item2 <= minAccessLevel;
		}
示例#13
0
        public bool HasUserAccessToCourse(string userId, string courseId, CourseRole minCourseRoleType)
        {
            var user = userManager.FindByNameAsync(userId).Result;

            if (IsSystemAdministrator(user))
            {
                return(true);
            }

            return(GetActualUserRoles(userId).Any(r => string.Equals(r.CourseId, courseId, StringComparison.OrdinalIgnoreCase) && r.Role <= minCourseRoleType));
        }
示例#14
0
		public async Task ToggleRole(string courseId, string userId, CourseRole role)
		{
			var userRole = db.UserRoles.FirstOrDefault(u => u.UserId == userId && u.Role == role && u.CourseId == courseId);
			if (userRole == null)
				db.UserRoles.Add(new UserRole
				{
					UserId = userId,
					CourseId = courseId,
					Role = role
				});
			else
				db.UserRoles.Remove(userRole);
			await db.SaveChangesAsync();
		}
示例#15
0
        public static bool HasAccess(this IPrincipal principal, CourseRole minAccessLevel)
        {
            if (principal.IsSystemAdministrator())
            {
                return(true);
            }

            var roles = principal.GetAllRoles().Select(t => t.Item2).ToList();

            if (!roles.Any())
            {
                return(false);
            }
            return(roles.Min() <= minAccessLevel);
        }
示例#16
0
        /// <summary>
        /// Create a course role
        /// </summary>
        public CourseRole CreateRole(int courseID, string name, bool isstaff)
        {
            //Check permission
            Authorize(courseID, Permission.COURSE, "createrole", courseID, null);

            CourseRole role = new CourseRole();

            role.CourseID = courseID;
            role.Name     = name;
            role.Staff    = isstaff;

            //Create role
            m_dp.CreateCourseRole(role);

            return(role);
        }
示例#17
0
        public static bool HasAccessFor(this IPrincipal principal, string courseId, CourseRole minAccessLevel)
        {
            if (principal.IsSystemAdministrator())
            {
                return(true);
            }

            var courseRole = principal.GetAllRoles().FirstOrDefault(t => t.Item1 == courseId);

            if (courseRole == null)
            {
                return(false);
            }

            return(courseRole.Item2 <= minAccessLevel);
        }
示例#18
0
        public async Task ToggleRole(string courseId, string userId, CourseRole role)
        {
            var userRole = db.UserRoles.FirstOrDefault(u => u.UserId == userId && u.Role == role && u.CourseId == courseId);

            if (userRole == null)
            {
                db.UserRoles.Add(new UserRole
                {
                    UserId   = userId,
                    CourseId = courseId,
                    Role     = role
                });
            }
            else
            {
                db.UserRoles.Remove(userRole);
            }
            await db.SaveChangesAsync();
        }
示例#19
0
        public List <string> GetCoursesWhereUserIsInRole(string userId, CourseRole minCourseRoleType)
        {
            var roles = GetActualUserRoles(userId).Where(r => r.Role <= minCourseRoleType).ToList();

            return(roles.Select(r => r.CourseId).ToList());
        }
示例#20
0
文件: perms.cs 项目: lokygb/FrontDesk
 /// <summary>
 /// Deny a permission to an entity
 /// </summary>
 public bool Deny(CourseRole role, string etype, string perm, int entityID, int courseID)
 {
     Authorize(courseID, etype, "updateperms", entityID, null);
     return(m_dp.DenyPermission(role.PrincipalID, perm, etype, entityID));
 }
示例#21
0
		private static void AddCourseRole(this ClaimsIdentity identity, string courseId, CourseRole role) 
		{
			identity.AddClaim(new Claim(courseRoleClaimType, courseId + " " + role));
		}
示例#22
0
		public static IEnumerable<string> GetCoursesIdFor(this IPrincipal principal, CourseRole role)
		{
			return principal.GetAllRoles().Where(t => t.Item2 <= role).Select(t => t.Item1);
		}
示例#23
0
 public Task <bool> HasUserAccessToAnyCourseAsync(string userId, CourseRole minCourseRole)
 {
     return(db.UserRoles.Where(r => r.UserId == userId && r.Role <= minCourseRole).AnyAsync());
 }
示例#24
0
 public async Task <bool> HasUserAccessToCourseAsync(string userId, string courseId, CourseRole minCourseRole)
 {
     return(await db.UserRoles.Where(r => r.UserId == userId && r.CourseId == courseId && r.Role <= minCourseRole).AnyAsync());
 }
示例#25
0
 public CourseRoleRequirement(CourseRole minCourseRole)
 {
     MinCourseRole = minCourseRole;
 }
示例#26
0
		public async Task<ActionResult> ToggleRole(string courseId, string userId, CourseRole role)
		{
			if (userManager.FindById(userId) == null || userId == User.Identity.GetUserId())
				return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
			await userRolesRepo.ToggleRole(courseId, userId, role);
			return Content(role.ToString());
		}
示例#27
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);
        }
示例#28
0
 private static void AddCourseRole(this ClaimsIdentity identity, string courseId, CourseRole role)
 {
     identity.AddClaim(new Claim(courseRoleClaimType, courseId + " " + role));
 }
示例#29
0
 public static IEnumerable <string> GetCoursesIdFor(this IPrincipal principal, CourseRole role)
 {
     return(principal.GetAllRoles().Where(t => t.Item2 <= role).Select(t => t.Item1));
 }