예제 #1
0
        public async Task <IActionResult> AddUserToGroup(string groupId, string userId)
        {
            var user = await _userManager.Users.FirstOrDefaultAsync(u => u.Id == userId);

            var groupToAdd = _context.Group.Include(g => g.Participants).FirstOrDefault(g => g.GroupId == groupId);

            if (user == null || groupToAdd == null)
            {
                return(NotFound());
            }

            if (groupToAdd.Participants == null)
            {
                groupToAdd.Participants = new List <Models.UserGroup>();
            }
            var userGroup = new Models.UserGroup();

            userGroup.User    = user;
            userGroup.Group   = groupToAdd;
            userGroup.UserId  = user.Id;
            userGroup.GroupId = groupToAdd.GroupId;

            if (!groupToAdd.Participants.Select(i => i.UserId).Contains(userId))
            {
                groupToAdd.Participants.Add(userGroup);
            }
            _context.Update(groupToAdd);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Users), new { id = groupId }));
        }
 public void RemovePersonToUserGroup(Models.Person p, Models.UserGroup ug)
 {
     if (ug.PersonInGroup.Contains(p))
     {
         ug.PersonInGroup.Add(p);
     }
 }
예제 #3
0
        public async Task <IActionResult> Create([Bind("GroupId,Name,DateOpened,OwnerId")] Group @group)
        {
            var date = DateTime.Now;
            var user = await _userManager.GetUserAsync(HttpContext.User);

            if (user == null)
            {
                return(View(@group));
            }
            if (_context.Group.Select(i => i.Name).Contains(group.Name))
            {
                return(View(@group));
            }
            group.DateOpened   = date;
            group.Owner        = user;
            group.OwnerId      = user.Id;
            group.Participants = new List <Models.UserGroup>();

            var userGroup = new Models.UserGroup();

            userGroup.User    = user;
            userGroup.Group   = group;
            userGroup.UserId  = user.Id;
            userGroup.GroupId = group.GroupId;
            group.Participants.Add(userGroup);
            if (ModelState.IsValid)
            {
                _context.Add(@group);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["OwnerId"] = new SelectList(_context.Users, "Id", "Id", @group.OwnerId);
            return(View(@group));
        }
예제 #4
0
 public static void ToEntity(ref Models.UserGroup entity, UserGroupModel source)
 {
     if (source != null)
     {
         var objectHelper = new ObjectHelper();
         objectHelper.CopyValue(source, entity, IgnoreList);
     }
 }
            public void RemoveContainerGroupFromUserGroup(Models.ContainerGroup cg, Models.UserGroup ug)
            {
                var v = _store.UserGroupContainerGroupAccesses.Find(access => access.ContainerGroup.Id == cg.Id && access.UserGroup.Id == ug.Id);

                if (v != null)
                {
                    _store.UserGroupContainerGroupAccesses.RemoveAll(a => a.Id == v.Id);
                }
            }
예제 #6
0
        public static ViewModel.UserGroup.UserGroupModel FromEntity(Models.UserGroup entity)
        {
            var data = new ViewModel.UserGroup.UserGroupModel();

            if (entity != null)
            {
                var objectHelper = new ObjectHelper();
                objectHelper.CopyValue(entity, data);
            }
            return(data);
        }
예제 #7
0
 private static Models.UserGroup SetupInstance()
 {
     Models.UserGroup result = new Models.UserGroup()
     {
         Id = 1,
         GroupName = "test"
     };
     UserGroupDAL.Instance.AddUserGroup(result);
     result.Id = UserGroupDAL.Instance.GetGroupByName(result.GroupName).Id;
     return result;
 }
            //TODO Add User to shared container list
            //TODO remove User to shared container list

            //TODO Add Container to shared user list
            public void AddContainerGroupToUserGroup(Models.ContainerGroup cg, Models.UserGroup ug)
            {
                if (!_store.UserGroupContainerGroupAccesses.Exists(access => access.ContainerGroup.Id == cg.Id && access.UserGroup.Id == ug.Id))
                {
                    //increment
                    var Id = _store.UserGroupContainerGroupAccesses.Count + 1;

                    _store.UserGroupContainerGroupAccesses.Add(new Models.UserGroupContainerGroupAccess {
                        ContainerGroup = cg, UserGroup = ug, Id = Id
                    });
                }
            }
예제 #9
0
 public void Get()
 {
     try
     {
         test = SetupInstance();
         Models.UserGroup g = UserGroupDAL.Instance.GetGroupById(test.Id);
         Assert.AreEqual("test", g.GroupName);
         g = UserGroupDAL.Instance.GetGroupByName(test.GroupName);
         Assert.AreEqual(test.Id, g.Id);
     }
     finally
     {
         Assert.IsTrue(UserGroupDAL.Instance.DeleteUserGroupByName(test.GroupName));
     }
 }
예제 #10
0
        /// <summary>
        /// Creates a new <see cref="User"/> from a given <paramref name="model"/>.
        /// </summary>
        /// <param name="model">The <see cref="Api.Models.User"/> to use as a template.</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation.</param>
        /// <returns>A <see cref="Task{TResult}"/> resulting in a new <see cref="User"/> on success, <see langword="null"/> if the requested <see cref="UserGroup"/> did not exist.</returns>
        async Task <Models.User> CreateNewUserFromModel(Api.Models.User model, CancellationToken cancellationToken)
        {
            Models.PermissionSet permissionSet = null;
            Models.UserGroup     group         = null;
            if (model.Group != null)
            {
                group = await DatabaseContext
                        .Groups
                        .AsQueryable()
                        .Where(x => x.Id == model.Group.Id)
                        .Include(x => x.PermissionSet)
                        .FirstOrDefaultAsync(cancellationToken)
                        .ConfigureAwait(false);
            }
            else
            {
                permissionSet = new Models.PermissionSet
                {
                    AdministrationRights  = model.PermissionSet?.AdministrationRights ?? AdministrationRights.None,
                    InstanceManagerRights = model.PermissionSet?.InstanceManagerRights ?? InstanceManagerRights.None,
                }
            };

            return(new Models.User
            {
                CreatedAt = DateTimeOffset.UtcNow,
                CreatedBy = AuthenticationContext.User,
                Enabled = model.Enabled ?? false,
                PermissionSet = permissionSet,
                Group = group,
                Name = model.Name,
                SystemIdentifier = model.SystemIdentifier,
                OAuthConnections = model
                                   .OAuthConnections
                                   ?.Select(x => new Models.OAuthConnection
                {
                    Provider = x.Provider,
                    ExternalUserId = x.ExternalUserId
                })
                                   .ToList()
                                   ?? new List <Models.OAuthConnection>(),
            });
        }
    }
예제 #11
0
        public async Task <IActionResult> Create([FromBody] UserGroup model, CancellationToken cancellationToken)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            if (model.Name == null)
            {
                return(BadRequest(new ErrorMessage(ErrorCode.ModelValidationFailure)));
            }

            var totalGroups = await DatabaseContext
                              .Groups
                              .AsQueryable()
                              .CountAsync(cancellationToken)
                              .ConfigureAwait(false);

            if (totalGroups >= generalConfiguration.UserGroupLimit)
            {
                return(Conflict(new ErrorMessage(ErrorCode.UserGroupLimitReached)));
            }

            var permissionSet = new Models.PermissionSet
            {
                AdministrationRights  = model.PermissionSet?.AdministrationRights ?? AdministrationRights.None,
                InstanceManagerRights = model.PermissionSet?.InstanceManagerRights ?? InstanceManagerRights.None
            };

            var dbGroup = new Models.UserGroup
            {
                Name          = model.Name,
                PermissionSet = permissionSet,
            };

            DatabaseContext.Groups.Add(dbGroup);
            await DatabaseContext.Save(cancellationToken).ConfigureAwait(false);

            Logger.LogInformation("Created new user group {0} ({1})", dbGroup.Name, dbGroup.Id);

            return(Created(dbGroup.ToApi(true)));
        }
예제 #12
0
        /// <summary> 要存master、permission、User </summary>
        public string SaveChanges(ref Models.UserGroup entity, List <int> permissions, List <int> insertUser, List <int> deleteUser, EntityState state)
        {
            var errMsg = "";

            using (var trans = _Entity.Database.BeginTransaction(IsolationLevel.Snapshot))
            {
                try
                {
                    if (state == EntityState.Deleted)
                    {
                        var userGroupID = entity.ID;
                        _Entity.UserGroupPermission.RemoveRange(_Entity.UserGroupPermission.Where(x => x.UserGroupID == userGroupID)); //移除權限
                        _Entity.UserGroupUser.RemoveRange(_Entity.UserGroupUser.Where(x => x.GroupID == userGroupID));                 //移除使用者
                        _Entity.UserGroup.Remove(entity);
                        _Entity.SaveChanges();
                    }
                    else
                    {
                        var userGroupID = entity.ID;
                        if (state == EntityState.Added)
                        {
                            _Entity.UserGroup.Add(entity);
                            _Entity.SaveChanges();
                            userGroupID = entity.ID;
                        }
                        else
                        {
                            //先移除在全部新增回去
                            _Entity.UserGroupPermission.RemoveRange(_Entity.UserGroupPermission.Where(x => x.UserGroupID == userGroupID));
                            _Entity.SaveChanges();
                        }
                        _Entity.UserGroupPermission.AddRange(permissions.Select(x =>
                        {
                            return(new UserGroupPermission()
                            {
                                PermissionID = x,
                                UserGroupID = userGroupID
                            });
                        }));
                        _Entity.UserGroupUser.AddRange(insertUser.Select(x =>
                        {
                            return(new UserGroupUser()
                            {
                                UserID = x,
                                GroupID = userGroupID
                            });
                        }));
                        _Entity.UserGroupUser.RemoveRange(deleteUser.Select(x =>
                        {
                            return(new UserGroupUser()
                            {
                                UserID = x,
                                GroupID = userGroupID
                            });
                        }));
                        _Entity.SaveChanges();
                    }
                    trans.Commit();
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                {
                    errMsg = ex.Message;
                }
                catch (Exception ex)
                {
                    errMsg = ex.Message;//ValidationHelper.GetSQLMessage(ex);
                }
            }
            return(errMsg);
        }
예제 #13
0
파일: Group.cs 프로젝트: XuPeiYao/SharpDisk
 /// <summary>
 /// 新增群組成員
 /// </summary>
 /// <param name="User">使用者</param>
 /// <param name="Database">資料庫</param>
 public void AddMember(User User,SharpDiskDbContext Database)
 {
     if (IsMember(User, Database)) {
         throw new ApiInvalidOperationException("重複成員");
     }
     UserGroup newdata = new Models.UserGroup() {
         User = User,
         Group = this
     };
     Database.UserGroup.Add(newdata);
     Database.SaveChanges();
 }
 //Who is in user group X
 public List <Models.Person> getListOfPeapleInGroupQuery(Models.UserGroup ug)
 {
     return(ug.PersonInGroup);
 }
        static void Main(string[] args)
        {
            //SetUp
            Storage  s = new Storage();
            Commands c = new Commands(s);
            Queries  q = new Queries(s);

            var shad = new Models.Person {
                Email = "*****@*****.**", DNVGLID = Guid.NewGuid().ToString(), Id = 1, Name = "Shad"
            };
            var anatoliy = new Models.Person {
                Email = "*****@*****.**", DNVGLID = Guid.NewGuid().ToString(), Id = 2, Name = "Anatoliy"
            };
            var s1 = new Models.Container {
                Id = 1, Name = "ship_01", ResourceId = Guid.NewGuid().ToString()
            };
            var s2 = new Models.Container {
                Id = 2, Name = "ship_02", ResourceId = Guid.NewGuid().ToString()
            };


            c.AddUser(shad);
            c.AddUser(anatoliy);

            c.AddContainer(s1);
            c.AddContainer(s2);

            //Add all ships containers to container grouping ships
            var cg1 = new Models.ContainerGroup {
                Id = 1, name = "ships", ContainerInGroup = new List <Models.Container>()
            };

            c.AddContainerToContainerGroup(s1, cg1);
            c.AddContainerToContainerGroup(s2, cg1);


            //Create user groups to access ships
            var ug1 = new Models.UserGroup {
                Id = 1, name = "readers of ships", PersonInGroup = new List <Models.Person>()
            };
            var ug2 = new Models.UserGroup {
                Id = 2, name = "admin of ships", PersonInGroup = new List <Models.Person>()
            };


            //Add users to a user group
            c.AddPersonToUserGroup(shad, ug1);
            c.AddPersonToUserGroup(shad, ug2);
            c.AddPersonToUserGroup(anatoliy, ug2);

            //Give access to ship
            c.AddContainerGroupToUserGroup(cg1, ug1);
            c.AddContainerGroupToUserGroup(cg1, ug2);

            //Which group has access?
            var o = q.getListOfUserGroupsWithAcessToContainerGroup(cg1);


            Console.WriteLine($"Which group has access to {cg1.name}");
            Console.WriteLine(o.Count);
            foreach (var aa in o)
            {
                Console.WriteLine(aa.name);

                Console.WriteLine("whos in that group?");
                var p = q.getListOfPeapleInGroupQuery(aa);
                foreach (var pp in p)
                {
                    Console.WriteLine(pp.Name);
                }
            }

            Console.WriteLine($"-------------------------");
            Console.WriteLine($"Removing user group {ug1.name} access from container group {cg1.name}");
            //Remove access
            c.RemoveContainerGroupFromUserGroup(cg1, ug1);
            //Which group has access?
            o = q.getListOfUserGroupsWithAcessToContainerGroup(cg1);

            Console.WriteLine($"Which group has access to {cg1.name}");
            Console.WriteLine(o.Count);
            foreach (var aa in o)
            {
                Console.WriteLine(aa.name);

                Console.WriteLine("whos in that group?");
                var p = q.getListOfPeapleInGroupQuery(aa);
                foreach (var pp in p)
                {
                    Console.WriteLine(pp.Name);
                }
            }

            Console.Read();
        }
예제 #16
0
 public void Delete()
 {
     test = SetupInstance();
     Assert.IsTrue(UserGroupDAL.Instance.DeleteUserGroupById(test.Id));
 }