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)), }); }
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), }); }
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(); }
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; }
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), }); }
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); }
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); }
public MasterHasResponsibleException(ProjectAcl entity) : base(entity, "Cannot remove master that has groups attached to it.") { Master = entity.User; }
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; }
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); }
public static PaymentType GetCashPaymentType(this ProjectAcl acl) { return(acl.Project.PaymentTypes.SingleOrDefault(pt => pt.UserId == acl.UserId && pt.IsCash)); }