Beispiel #1
0
        public IActionResult AddGroup([FromBody] GroupCreateRequestModel addGroupRequestModel)
        {
            //use groupname to identify group,because the id is invisible to user
            if (_databaseService.Groups.FirstOrDefault(t => t.GroupName == addGroupRequestModel.GroupName) != null)
            {
                throw new GroupnameDuplicatedException("Groupname duplicated.");
            }
            //initialize new group and save it to database
            Group group = new Group();

            group.GroupName = addGroupRequestModel.GroupName;
            _databaseService.Groups.Add(group);
            //obtain the user
            var user = HttpContext.Items["actor"] as User;

            //initialize grouptouser and save it to database
            GroupToUser groupToUser = new GroupToUser();

            groupToUser.Group   = group;
            groupToUser.GroupId = group.Id;
            groupToUser.User    = user;
            groupToUser.UserId  = user.Id;
            _databaseService.GroupsToUsersRelation.Add(groupToUser);

            // initial group permission to the new group
            _databaseService.UserToPermissionRelation.Add(new UserToPermission()
            {
                User       = user,
                UserId     = user.Id,
                Permission = PermissionBank.GroupOperationPermission(group.GroupName, "member", "add")
            });

            _databaseService.UserToPermissionRelation.Add(new UserToPermission()
            {
                User       = user,
                UserId     = user.Id,
                Permission = PermissionBank.GroupOperationPermission(group.GroupName, "member", "remove")
            });

            _databaseService.UserToPermissionRelation.Add(new UserToPermission()
            {
                User       = user,
                UserId     = user.Id,
                Permission = PermissionBank.GroupOperationPermission(group.GroupName, "", "delete")
            });

            _databaseService.GroupsToPermissionsRelation.Add(new GroupToPermission()
            {
                Group      = group,
                GroupId    = group.Id,
                Permission = PermissionBank.GroupOperationPermission(group.GroupName, "member", "list")
            });

            //find the grouptouser in the database
            //below is how to input parameters when the entity has composite key values:
            //"The ordering of composite key values is as defined in the EDM, which is in turn as defined in the designer, by the Code First fluent API, or by the DataMember attribute."
            // var groupToUser_db = _databaseService.GroupsToUsersRelation.Find(groupToUser.GroupId, groupToUser.UserId);

            //waiting for adding permissions for the group

            if (!_databaseService.Files.Any(s => s.Path == $"/groups/{group.GroupName}"))
            {
                var groupDirectory = EntityFile.CreateDirectoryRecord(group.GroupName, "/groups", $"/groups/{group.GroupName}", user);
                _databaseService.Files.Add(groupDirectory);
            }
            _databaseService.SaveChanges();

            return(Ok(new GroupCreateResultModel(group)));
        }
 public Response <GroupModel> CreateGroup(GroupCreateRequestModel model)
 {
     return(_studentHandler.CreateGroup(model));
 }