public static AclViewModel New(ProjectAcl acl, User currentUser, User targetUser)
        {
            return(new AclViewModel
            {
                ProjectId = acl.ProjectId,
                ProjectAclId = -1,
                UserId = acl.UserId,
                CanManageClaims = acl.CanManageClaims,
                CanChangeFields = acl.CanChangeFields,
                CanChangeProjectProperties = acl.CanChangeProjectProperties,
                CanGrantRights = acl.CanGrantRights,
                CanEditRoles = acl.CanEditRoles,
                CanManageMoney = acl.CanManageMoney,
                CanSendMassMails = acl.CanSendMassMails,
                CanManagePlots = acl.CanManagePlots,
                CanManageAccommodation = acl.CanManageAccommodation,
                CanSetPlayersAccommodations = acl.CanSetPlayersAccommodations,
                ProjectName = acl.Project.ProjectName,

                AccomodationEnabled = acl.Project.Details.EnableAccommodation,

                UserDetails = new UserProfileDetailsViewModel(targetUser,
                                                              (AccessReason)acl.User.GetProfileAccess(currentUser)),
            });
        }
Exemple #2
0
        public async Task GrantAccess(GrantAccessRequest grantAccessRequest)
        {
            var project = await ProjectRepository.GetProjectAsync(grantAccessRequest.ProjectId);

            if (!project.HasMasterAccess(CurrentUserId, a => a.CanGrantRights))
            {
                var user = await UserRepository.GetById(CurrentUserId);

                if (!user.Auth.IsAdmin)
                {
                    project.RequestMasterAccess(CurrentUserId, a => a.CanGrantRights);
                }
            }

            project.EnsureProjectActive();

            var acl = project.ProjectAcls.SingleOrDefault(a => a.UserId == grantAccessRequest.UserId);

            if (acl == null)
            {
                acl = new ProjectAcl
                {
                    ProjectId = project.ProjectId,
                    UserId    = grantAccessRequest.UserId,
                };
                project.ProjectAcls.Add(acl);
            }

            SetRightsFromRequest(grantAccessRequest, acl);

            await UnitOfWork.SaveChangesAsync();
        }
        public static AclViewModel FromAcl(ProjectAcl acl,
                                           int count,
                                           IReadOnlyCollection <CharacterGroup> groups,
                                           User currentUser,
                                           IUriService uriService)
        {
            return(new AclViewModel
            {
                ProjectId = acl.ProjectId,
                ProjectAclId = acl.ProjectAclId,
                UserId = acl.UserId,
                CanManageClaims = acl.CanManageClaims,
                CanChangeFields = acl.CanChangeFields,
                CanChangeProjectProperties = acl.CanChangeProjectProperties,
                CanGrantRights = acl.CanGrantRights,
                CanEditRoles = acl.CanEditRoles,
                CanManageMoney = acl.CanManageMoney,
                CanSendMassMails = acl.CanSendMassMails,
                CanManagePlots = acl.CanManagePlots,
                CanManageAccommodation = acl.CanManageAccommodation,
                CanSetPlayersAccommodations = acl.CanSetPlayersAccommodations,
                ProjectName = acl.Project.ProjectName,

                AccomodationEnabled = acl.Project.Details.EnableAccommodation,

                ClaimsCount = count,
                UserDetails = new UserProfileDetailsViewModel(acl.User,
                                                              (AccessReason)acl.User.GetProfileAccess(currentUser)),
                ResponsibleFor = groups.AsObjectLinks(uriService),
            });
        }
Exemple #4
0
        public async Task GrantAccess(int projectId, int currentUserId, int userId, bool canGrantRights,
                                      bool canChangeFields, bool canChangeProjectProperties, bool canApproveClaims, bool canEditRoles,
                                      bool canManageMoney, bool canSendMassMails, bool canManagePlots)
        {
            var project = await ProjectRepository.GetProjectAsync(projectId);

            project.RequestMasterAccess(currentUserId, a => a.CanGrantRights);
            project.EnsureProjectActive();

            var acl = project.ProjectAcls.SingleOrDefault(a => a.UserId == userId);

            if (acl == null)
            {
                acl = new ProjectAcl()
                {
                    ProjectId = project.ProjectId,
                    UserId    = userId,
                    Project   = project //Used inside UpdatePaymentTypes()
                };
                project.ProjectAcls.Add(acl);
            }
            acl.CanGrantRights             = canGrantRights;
            acl.CanChangeFields            = canChangeFields;
            acl.CanChangeProjectProperties = canChangeProjectProperties;
            acl.CanManageClaims            = canApproveClaims;
            acl.CanEditRoles     = canEditRoles;
            acl.CanManageMoney   = canManageMoney;
            acl.CanSendMassMails = canSendMassMails;
            acl.CanManagePlots   = canManagePlots;

            await UnitOfWork.SaveChangesAsync();
        }
Exemple #5
0
        public async Task <Project> AddProject(string projectName, User creator)
        {
            var project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = false,
                CreatedDate       = DateTime.UtcNow,
                ProjectName       = Required(projectName),
                CharacterGroups   = new List <CharacterGroup>()
                {
                    new CharacterGroup()
                    {
                        IsPublic                = true,
                        IsRoot                  = true,
                        CharacterGroupName      = "Все роли",
                        IsActive                = true,
                        ResponsibleMasterUserId = creator.UserId,
                        HaveDirectSlots         = true,
                        AvaiableDirectSlots     = -1
                    }
                },
                ProjectAcls = new List <ProjectAcl>()
                {
                    ProjectAcl.CreateRootAcl(creator.UserId)
                }
            };

            project.MarkTreeModified();
            UnitOfWork.GetDbSet <Project>().Add(project);
            await UnitOfWork.SaveChangesAsync();

            return(project);
        }
 public static PaymentType GetCashPaymentType([NotNull] this ProjectAcl acl)
 {
     if (acl == null)
     {
         throw new ArgumentNullException(nameof(acl));
     }
     return(acl.Project.PaymentTypes.SingleOrDefault(pt => pt.UserId == acl.UserId && pt.IsCash));
 }
 public PaymentTypeListItemViewModel(ProjectAcl acl)
 {
     PaymentTypeId           = null;
     ProjectId               = acl.ProjectId;
     Name                    = PaymentTypeKindViewModel.Cash.GetDisplayName();
     TypeKind                = PaymentTypeKindViewModel.Cash;
     Master                  = acl.User;
     IsActive                = false;
     IsDefault               = false;
     CanBePermanentlyDeleted = false;
 }
 public PaymentTypeListItemViewModel(ProjectAcl acl)
 {
     PaymentTypeId           = null;
     ProjectId               = acl.ProjectId;
     Name                    = acl.User.GetCashName();
     Master                  = acl.User;
     IsCash                  = true;
     IsActive                = false;
     IsDefault               = false;
     CanBePermanentlyDeleted = false;
 }
Exemple #9
0
        public async Task <Project> AddProject(CreateProjectRequest request)
        {
            var rootGroup = new CharacterGroup()
            {
                IsPublic = true,
                IsRoot   = true,
                //TODO[Localize]
                CharacterGroupName      = "Все роли",
                IsActive                = true,
                ResponsibleMasterUserId = CurrentUserId,
                HaveDirectSlots         = true,
                AvaiableDirectSlots     = -1,
            };

            MarkCreatedNow(rootGroup);
            var project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = false,
                CreatedDate       = Now,
                ProjectName       = Required(request.ProjectName),
                CharacterGroups   = new List <CharacterGroup>()
                {
                    rootGroup,
                },
                ProjectAcls = new List <ProjectAcl>()
                {
                    ProjectAcl.CreateRootAcl(CurrentUserId, isOwner: true),
                },
                Details = new ProjectDetails(),
            };

            MarkTreeModified(project);
            switch (request.ProjectType)
            {
            case ProjectTypeDto.Larp:
                break;

            case ProjectTypeDto.Convention:
                project.Details.AutoAcceptClaims    = true;
                project.Details.EnableAccommodation = true;
                project.Details.GenerateCharacterNamesFromPlayer = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            UnitOfWork.GetDbSet <Project>().Add(project);
            await UnitOfWork.SaveChangesAsync();

            return(project);
        }
        public async Task GrantAccessAsAdmin(int projectId)
        {
            var project = await ProjectRepository.GetProjectAsync(projectId);

            var acl = project.ProjectAcls.SingleOrDefault(a => a.UserId == CurrentUserId);

            if (acl == null)
            {
                project.ProjectAcls.Add(ProjectAcl.CreateRootAcl(CurrentUserId));
            }

            await UnitOfWork.SaveChangesAsync();
        }
 public static DeleteAclViewModel FromAcl(ProjectAcl acl, int count, IReadOnlyCollection <CharacterGroup> groups, IUriService uriService)
 {
     return(new DeleteAclViewModel
     {
         ProjectId = acl.ProjectId,
         ProjectAclId = acl.ProjectAclId,
         UserId = acl.UserId,
         ProjectName = acl.Project.ProjectName,
         ClaimsCount = count,
         UserDetails = new UserProfileDetailsViewModel(acl.User, AccessReason.CoMaster),
         ResponsibleFor = groups.AsObjectLinks(uriService),
         Masters = acl.Project.GetMasterListViewModel().Where(master => master.Id != acl.UserId.ToString()).OrderBy(m => m.Name),
     });
 }
Exemple #12
0
        public async Task <Project> AddProject(CreateProjectRequest request)
        {
            var rootGroup = new CharacterGroup()
            {
                IsPublic = true,
                IsRoot   = true,
                //TODO[Localize]
                CharacterGroupName      = "Все роли",
                IsActive                = true,
                ResponsibleMasterUserId = CurrentUserId,
                HaveDirectSlots         = true,
                AvaiableDirectSlots     = -1,
            };

            MarkCreatedNow(rootGroup);
            var project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = false,
                CreatedDate       = Now,
                ProjectName       = Required(request.ProjectName),
                CharacterGroups   = new List <CharacterGroup>()
                {
                    rootGroup,
                },
                ProjectAcls = new List <ProjectAcl>()
                {
                    ProjectAcl.CreateRootAcl(CurrentUserId, isOwner: true),
                },
                Details = new ProjectDetails()
                {
                    CharacterNameLegacyMode = false,
                },
                ProjectFields = new List <ProjectField>(),
            };

            MarkTreeModified(project);
            ConfigureProjectDefaults(project, request.ProjectType);

            UnitOfWork.GetDbSet <Project>().Add(project);
            await UnitOfWork.SaveChangesAsync();

            return(project);
        }
Exemple #13
0
 public static AclViewModel FromAcl(ProjectAcl acl, int count)
 {
     return(new AclViewModel()
     {
         ProjectId = acl.ProjectId,
         ProjectAclId = acl.ProjectAclId,
         UserId = acl.UserId,
         CanManageClaims = acl.CanManageClaims,
         CanChangeFields = acl.CanChangeFields,
         CanChangeProjectProperties = acl.CanChangeProjectProperties,
         CanGrantRights = acl.CanGrantRights,
         CanEditRoles = acl.CanEditRoles,
         CanManageMoney = acl.CanManageMoney,
         CanSendMassMails = acl.CanSendMassMails,
         CanManagePlots = acl.CanManagePlots,
         Master = acl.User,
         ProjectName = acl.Project.ProjectName,
         ClaimsCount = count
     });
 }
        public async Task GrantAccess(int projectId, int currentUserId, int userId, bool canGrantRights,
                                      bool canChangeFields, bool canChangeProjectProperties, bool canApproveClaims, bool canEditRoles,
                                      bool canManageMoney, bool canSendMassMails, bool canManagePlots)
        {
            var project = await ProjectRepository.GetProjectAsync(projectId);

            if (!project.HasMasterAccess(currentUserId, a => a.CanGrantRights))
            {
                var user = await UserRepository.GetById(currentUserId);

                if (!user.Auth?.IsAdmin == true)
                {
                    project.RequestMasterAccess(currentUserId, a => a.CanGrantRights);
                }
            }
            project.EnsureProjectActive();

            var acl = project.ProjectAcls.SingleOrDefault(a => a.UserId == userId);

            if (acl == null)
            {
                acl = new ProjectAcl
                {
                    ProjectId = project.ProjectId,
                    UserId    = userId,
                };
                project.ProjectAcls.Add(acl);
            }
            acl.CanGrantRights             = canGrantRights;
            acl.CanChangeFields            = canChangeFields;
            acl.CanChangeProjectProperties = canChangeProjectProperties;
            acl.CanManageClaims            = canApproveClaims;
            acl.CanEditRoles     = canEditRoles;
            acl.CanManageMoney   = canManageMoney;
            acl.CanSendMassMails = canSendMassMails;
            acl.CanManagePlots   = canManagePlots;

            await UnitOfWork.SaveChangesAsync();
        }
        public async Task <Project> AddProject(string projectName, User creator)
        {
            var rootGroup = new CharacterGroup()
            {
                IsPublic = true,
                IsRoot   = true,
                //TODO[Localize]
                CharacterGroupName      = "Все роли",
                IsActive                = true,
                ResponsibleMasterUserId = creator.UserId,
                HaveDirectSlots         = true,
                AvaiableDirectSlots     = -1,
            };

            MarkCreatedNow(rootGroup);
            var project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = false,
                CreatedDate       = Now,
                ProjectName       = Required(projectName),
                CharacterGroups   = new List <CharacterGroup>()
                {
                    rootGroup
                },
                ProjectAcls = new List <ProjectAcl>()
                {
                    ProjectAcl.CreateRootAcl(creator.UserId)
                },
                Details = new ProjectDetails()
            };

            MarkTreeModified(project);
            UnitOfWork.GetDbSet <Project>().Add(project);
            await UnitOfWork.SaveChangesAsync();

            return(project);
        }
        public MockedProject()
        {
            MasterOnlyField = new ProjectField()
            {
                CanPlayerEdit          = false,
                CanPlayerView          = false,
                IsActive               = true,
                ShowOnUnApprovedClaims = true
            };
            CharacterField = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                ShowOnUnApprovedClaims        = true,
                AvailableForCharacterGroupIds = new int[0]
            };
            ConditionalField = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                ShowOnUnApprovedClaims        = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                AvailableForCharacterGroupIds = new int[0]
            };

            HideForUnApprovedClaim = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                ShowOnUnApprovedClaims        = false,
                AvailableForCharacterGroupIds = new int[0]
            };

            PublicField = new ProjectField()
            {
                CanPlayerEdit = false,
                CanPlayerView = true,
                IsPublic      = true,
                IsActive      = true,
                FieldBoundTo  = FieldBoundTo.Character,
                AvailableForCharacterGroupIds = new int[0],
                ShowOnUnApprovedClaims        = true,
            };

            ConditionalHeader = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                ShowOnUnApprovedClaims        = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                AvailableForCharacterGroupIds = new int[0],
                FieldType                     = ProjectFieldType.Header
            };

            var characterFieldValue = new FieldWithValue(CharacterField, "Value");
            var publicFieldValue    = new FieldWithValue(PublicField, "Public");

            Character = new Character
            {
                IsActive                = true,
                IsAcceptingClaims       = true,
                ParentCharacterGroupIds = new int[0]
            };

            CharacterWithoutGroup = new Character
            {
                IsActive                = true,
                IsAcceptingClaims       = true,
                ParentCharacterGroupIds = new int[0]
            };


            Group = new CharacterGroup()
            {
                AvaiableDirectSlots = 0,
                HaveDirectSlots     = true
            };

            Project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = true,
                ProjectAcls       = new List <ProjectAcl>
                {
                    ProjectAcl.CreateRootAcl(Master.UserId)
                },
                ProjectFields = new List <ProjectField>()
                {
                    MasterOnlyField, CharacterField, ConditionalField, HideForUnApprovedClaim, PublicField, ConditionalHeader
                },
                Characters = new List <Character>()
                {
                    Character, CharacterWithoutGroup
                },
                CharacterGroups = new List <CharacterGroup> {
                    Group
                },
                Claims = new List <Claim>()
            };

            FixProjectSubEntities(Project);
            //That needs to happen after FixProjectSubEntities(..)
            Character.JsonData = new[] { characterFieldValue, publicFieldValue }.SerializeFields();

            Character.ParentCharacterGroupIds = new[] { Group.CharacterGroupId };

            ConditionalField.AvailableForCharacterGroupIds  = new[] { Group.CharacterGroupId };
            ConditionalHeader.AvailableForCharacterGroupIds = new[] { Group.CharacterGroupId };
        }
 public static bool CanAcceptCash([NotNull] this ProjectAcl projectAcl)
 {
     return(projectAcl.GetCashPaymentType()?.IsActive ?? false);
 }
Exemple #18
0
 public MasterHasResponsibleException(ProjectAcl entity) : base(entity, "Cannot remove master that has groups attached to it.")
 {
     Master = entity.User;
 }
Exemple #19
0
 private static void SetRightsFromRequest(AccessRequestBase grantAccessRequest, ProjectAcl acl)
 {
     acl.CanGrantRights             = grantAccessRequest.CanGrantRights;
     acl.CanChangeFields            = grantAccessRequest.CanChangeFields;
     acl.CanChangeProjectProperties = grantAccessRequest.CanChangeProjectProperties;
     acl.CanManageClaims            = grantAccessRequest.CanManageClaims;
     acl.CanEditRoles           = grantAccessRequest.CanEditRoles;
     acl.CanManageMoney         = grantAccessRequest.CanManageMoney;
     acl.CanSendMassMails       = grantAccessRequest.CanSendMassMails;
     acl.CanManagePlots         = grantAccessRequest.CanManagePlots;
     acl.CanManageAccommodation = grantAccessRequest.CanManageAccommodation &&
                                  acl.Project.Details.EnableAccommodation;
     acl.CanSetPlayersAccommodations = grantAccessRequest.CanSetPlayersAccommodations &&
                                       acl.Project.Details.EnableAccommodation;
 }
Exemple #20
0
        public MockedProject()
        {
            MasterOnlyField = new ProjectField()
            {
                CanPlayerEdit          = false,
                CanPlayerView          = false,
                IsActive               = true,
                ShowOnUnApprovedClaims = true,
            };
            CharacterField = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                ShowOnUnApprovedClaims        = true,
                AvailableForCharacterGroupIds = Array.Empty <int>(),
            };

            HideForUnApprovedClaim = new ProjectField()
            {
                CanPlayerEdit                 = true,
                CanPlayerView                 = true,
                IsActive                      = true,
                FieldBoundTo                  = FieldBoundTo.Character,
                ShowOnUnApprovedClaims        = false,
                AvailableForCharacterGroupIds = Array.Empty <int>(),
            };

            PublicField = new ProjectField()
            {
                CanPlayerEdit = false,
                CanPlayerView = true,
                IsPublic      = true,
                IsActive      = true,
                FieldBoundTo  = FieldBoundTo.Character,
                AvailableForCharacterGroupIds = Array.Empty <int>(),
                ShowOnUnApprovedClaims        = true,
            };

            Character = new Character
            {
                IsActive                = true,
                IsAcceptingClaims       = true,
                ParentCharacterGroupIds = Array.Empty <int>(),
            };

            CharacterWithoutGroup = new Character
            {
                IsActive                = true,
                IsAcceptingClaims       = true,
                ParentCharacterGroupIds = Array.Empty <int>(),
            };


            Project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = true,
                ProjectAcls       = new List <ProjectAcl>
                {
                    ProjectAcl.CreateRootAcl(Master.UserId, isOwner: true),
                },
                ProjectFields = new List <ProjectField>()
                {
                    MasterOnlyField,
                    CharacterField,
                    HideForUnApprovedClaim,
                    PublicField,
                },
                Characters = new List <Character>()
                {
                    Character, CharacterWithoutGroup
                },
                CharacterGroups = new List <CharacterGroup>(),
                Claims          = new List <Claim>(),
                Details         = new ProjectDetails(),
            };

            FixProjectSubEntities(Project);

            Group = CreateCharacterGroup(new CharacterGroup()
            {
                AvaiableDirectSlots = 1,
                HaveDirectSlots     = true,
            });

            Character.ParentCharacterGroupIds = new[] { Group.CharacterGroupId };
        }
        public async Task <Project> AddProject(CreateProjectRequest request)
        {
            var rootGroup = new CharacterGroup()
            {
                IsPublic = true,
                IsRoot   = true,
                //TODO[Localize]
                CharacterGroupName      = "Все роли",
                IsActive                = true,
                ResponsibleMasterUserId = CurrentUserId,
                HaveDirectSlots         = true,
                AvaiableDirectSlots     = -1,
            };

            MarkCreatedNow(rootGroup);
            var project = new Project()
            {
                Active            = true,
                IsAcceptingClaims = false,
                CreatedDate       = Now,
                ProjectName       = Required(request.ProjectName),
                CharacterGroups   = new List <CharacterGroup>()
                {
                    rootGroup,
                },
                ProjectAcls = new List <ProjectAcl>()
                {
                    ProjectAcl.CreateRootAcl(CurrentUserId, isOwner: true),
                },
                Details       = new ProjectDetails(),
                ProjectFields = new List <ProjectField>(),
            };

            MarkTreeModified(project);
            switch (request.ProjectType)
            {
            case ProjectTypeDto.Larp:

                project.Details.CharacterNameLegacyMode = false;
                project.Details.CharacterNameField      = new ProjectField()
                {
                    CanPlayerEdit     = false,
                    CanPlayerView     = true,
                    FieldBoundTo      = FieldBoundTo.Character,
                    FieldName         = "Имя персонажа", //TODO[Localize]
                    FieldType         = ProjectFieldType.String,
                    IsActive          = true,
                    IsPublic          = true,
                    MandatoryStatus   = MandatoryStatus.Required,
                    IncludeInPrint    = false,
                    ValidForNpc       = true,
                    ProjectFieldId    = -2,
                    Description       = new MarkdownString(""),
                    MasterDescription = new MarkdownString(""),
                };
                project.Details.CharacterDescription = new ProjectField()
                {
                    CanPlayerEdit     = false,
                    CanPlayerView     = true,
                    FieldBoundTo      = FieldBoundTo.Character,
                    FieldName         = "Описание персонажа", //TODO[Localize]
                    FieldType         = ProjectFieldType.Text,
                    IsActive          = true,
                    IsPublic          = true,
                    MandatoryStatus   = MandatoryStatus.Optional,
                    IncludeInPrint    = false,
                    ValidForNpc       = true,
                    ProjectFieldId    = -1,
                    Description       = new MarkdownString(""),
                    MasterDescription = new MarkdownString(""),
                };

                project.ProjectFields.Add(project.Details.CharacterNameField);

                project.ProjectFields.Add(project.Details.CharacterDescription);
                break;

            case ProjectTypeDto.Convention:
                project.Details.AutoAcceptClaims        = true;
                project.Details.EnableAccommodation     = true;
                project.Details.CharacterNameLegacyMode = false;
                project.Details.CharacterNameField      = null;
                project.Details.CharacterDescription    = null;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            UnitOfWork.GetDbSet <Project>().Add(project);
            await UnitOfWork.SaveChangesAsync();

            return(project);
        }
Exemple #22
0
 public static PaymentType GetCashPaymentType(this ProjectAcl acl)
 {
     return(acl.Project.PaymentTypes.SingleOrDefault(pt => pt.UserId == acl.UserId && pt.IsCash));
 }