예제 #1
0
        public void AddRelatedAdminUsers(Workgroup workgroup)
        {
            if (!workgroup.Administrative)
            {
                //if this isn't admin, we want to check if we should add users from admin workgroups
                var parentWorkgroupIds = GetParentWorkgroups(workgroup.Id);
                foreach (var parentWorkgroupId in parentWorkgroupIds)
                {
                    var parentWorkgroup = _repositoryFactory.WorkgroupRepository.Queryable.Single(a => a.Id == parentWorkgroupId);
                    foreach (var workgroupPermission in parentWorkgroup.Permissions)
                    {
                        if (!_workgroupPermissionRepository.Queryable.Any(a => a.Workgroup == workgroup && a.Role == workgroupPermission.Role && a.User == workgroupPermission.User && a.ParentWorkgroup == parentWorkgroup))
                        {
                            Check.Require(workgroupPermission.Role.Id != Role.Codes.Requester);
                            var wp = new WorkgroupPermission();
                            wp.Role            = workgroupPermission.Role;
                            wp.User            = workgroupPermission.User;
                            wp.Workgroup       = workgroup;
                            wp.IsAdmin         = true;
                            wp.IsFullFeatured  = parentWorkgroup.IsFullFeatured;
                            wp.ParentWorkgroup = parentWorkgroup;

                            _workgroupPermissionRepository.EnsurePersistent(wp);
                        }
                    }
                }
                var workgroupPermissionsThatMightNeedToBeRemoved = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup && a.IsAdmin && !parentWorkgroupIds.Contains(a.ParentWorkgroup.Id)).ToList();
                foreach (var workgroupPermission in workgroupPermissionsThatMightNeedToBeRemoved)
                {
                    _workgroupPermissionRepository.Remove(workgroupPermission);
                }
            }
            else
            {
                var wp = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup).ToList();

                if (wp.Count > 0)
                {
                    var wpActions =
                        _workgroupPermissionRepository.Queryable.Where(a => a.ParentWorkgroup == workgroup).Select(
                            b => new WorkgroupPermissionActions(b, WorkgroupPermissionActions.Actions.Delete)).ToList();
                    var ids = GetChildWorkgroups(workgroup.Id);
                    foreach (var adminWP in wp) //Go through each permission in the workgroup
                    {
                        Check.Require(adminWP.Role.Id != Role.Codes.Requester);
                        foreach (var childid in ids)
                        {
                            var wpAction =
                                wpActions.SingleOrDefault(
                                    a =>
                                    a.WorkgroupPermission.Workgroup.Id == childid &&
                                    a.WorkgroupPermission.User == adminWP.User &&
                                    a.WorkgroupPermission.Role == adminWP.Role);
                            if (wpAction != null)
                            {
                                wpAction.Action = WorkgroupPermissionActions.Actions.Nothing;
                            }
                            else
                            {
                                wpAction = new WorkgroupPermissionActions(new WorkgroupPermission(),
                                                                          WorkgroupPermissionActions.Actions.Add);
                                wpAction.WorkgroupPermission.Role      = adminWP.Role;
                                wpAction.WorkgroupPermission.User      = adminWP.User;
                                wpAction.WorkgroupPermission.Workgroup =
                                    _workgroupRepository.Queryable.Single(a => a.Id == childid);
                                wpAction.WorkgroupPermission.IsAdmin         = true;
                                wpAction.WorkgroupPermission.IsFullFeatured  = workgroup.IsFullFeatured;
                                wpAction.WorkgroupPermission.ParentWorkgroup = workgroup;
                                wpActions.Add(wpAction);
                            }
                        }
                    }
                    foreach (var wpAction in wpActions)
                    {
                        switch (wpAction.Action)
                        {
                        case WorkgroupPermissionActions.Actions.Delete:
                            _workgroupPermissionRepository.Remove(wpAction.WorkgroupPermission);
                            break;

                        case WorkgroupPermissionActions.Actions.Add:
                            _workgroupPermissionRepository.EnsurePersistent(wpAction.WorkgroupPermission);
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
        }
예제 #2
0
        public void AddRelatedAdminUsers(Workgroup workgroup)
        {
            if (!workgroup.Administrative)
            {
                //if this isn't admin, we want to check if we should add users from admin workgroups
                var parentWorkgroupIds = GetParentWorkgroups(workgroup.Id);
                foreach (var parentWorkgroupId in parentWorkgroupIds)
                {
                    var parentWorkgroup = _repositoryFactory.WorkgroupRepository.Queryable.Single(a => a.Id == parentWorkgroupId);
                    foreach (var workgroupPermission in parentWorkgroup.Permissions)
                    {
                        if (!_workgroupPermissionRepository.Queryable.Any(a => a.Workgroup == workgroup && a.Role == workgroupPermission.Role && a.User == workgroupPermission.User && a.ParentWorkgroup == parentWorkgroup))
                        {
                            Check.Require(workgroupPermission.Role.Id != Role.Codes.Requester);
                            var wp = new WorkgroupPermission();
                            wp.Role = workgroupPermission.Role;
                            wp.User = workgroupPermission.User;
                            wp.Workgroup = workgroup;
                            wp.IsAdmin = true;
                            wp.IsFullFeatured = parentWorkgroup.IsFullFeatured;
                            wp.ParentWorkgroup = parentWorkgroup;

                            _workgroupPermissionRepository.EnsurePersistent(wp);
                        }
                    }
                }
                var workgroupPermissionsThatMightNeedToBeRemoved = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup && a.IsAdmin && !parentWorkgroupIds.Contains(a.ParentWorkgroup.Id)).ToList();
                foreach (var workgroupPermission in workgroupPermissionsThatMightNeedToBeRemoved)
                {
                    _workgroupPermissionRepository.Remove(workgroupPermission);
                }
            }
            else
            {
                var wp = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup).ToList();

                if (wp.Count > 0)
                {
                    var wpActions =
                        _workgroupPermissionRepository.Queryable.Where(a => a.ParentWorkgroup == workgroup).Select(
                            b => new WorkgroupPermissionActions(b, WorkgroupPermissionActions.Actions.Delete)).ToList();
                    var ids = GetChildWorkgroups(workgroup.Id);
                    foreach (var adminWP in wp) //Go through each permission in the workgroup
                    {
                        Check.Require(adminWP.Role.Id != Role.Codes.Requester);
                        foreach (var childid in ids)
                        {
                            var wpAction =
                                wpActions.SingleOrDefault(
                                    a =>
                                    a.WorkgroupPermission.Workgroup.Id == childid &&
                                    a.WorkgroupPermission.User == adminWP.User &&
                                    a.WorkgroupPermission.Role == adminWP.Role);
                            if (wpAction != null)
                            {
                                wpAction.Action = WorkgroupPermissionActions.Actions.Nothing;
                            }
                            else
                            {
                                wpAction = new WorkgroupPermissionActions(new WorkgroupPermission(),
                                                                          WorkgroupPermissionActions.Actions.Add);
                                wpAction.WorkgroupPermission.Role = adminWP.Role;
                                wpAction.WorkgroupPermission.User = adminWP.User;
                                wpAction.WorkgroupPermission.Workgroup =
                                    _workgroupRepository.Queryable.Single(a => a.Id == childid);
                                wpAction.WorkgroupPermission.IsAdmin = true;
                                wpAction.WorkgroupPermission.IsFullFeatured = workgroup.IsFullFeatured;
                                wpAction.WorkgroupPermission.ParentWorkgroup = workgroup;
                                wpActions.Add(wpAction);
                            }
                        }
                    }
                    foreach (var wpAction in wpActions)
                    {
                        switch (wpAction.Action)
                        {
                            case WorkgroupPermissionActions.Actions.Delete:
                                _workgroupPermissionRepository.Remove(wpAction.WorkgroupPermission);
                                break;
                            case WorkgroupPermissionActions.Actions.Add:
                                _workgroupPermissionRepository.EnsurePersistent(wpAction.WorkgroupPermission);
                                break;
                            default:
                                break;
                        }
                    }
                }

            }
        }