示例#1
0
 private void EnsureValidConfigurationBasic(BasicOrganizationModel model)
 {
     if (model == null)
     {
         throw new ArgumentNullException(nameof(model));
     }
 }
示例#2
0
        public async Task <OrganizationModel> OrganizationApply(BasicOrganizationModel configurationModel)
        {
            EnsureValidConfigurationBasic(configurationModel);

            // create the organization
            var organizationIdentifier = CreateOrganizationIdentifier(configurationModel);
            var organizationModel      = await api.Organization.GetAsync(organizationIdentifier);

            if (organizationModel == null)
            {
                organizationModel = new OrganizationModel(organizationIdentifier)
                {
                    Name = configurationModel.Name
                }
                .InitializeEmptyMetadata()
                .InitializeEmptyPrivileges();
            }

            organizationModel.Write("type", "basic");

            // define user access identifiers
            idSystem             = "u:system";
            idOrganizationMember = $"o:{organizationIdentifier.OrganizationKey}";

            organizationModel.WriteACLs("read", idSystem, idOrganizationMember);
            organizationModel.WriteACLs("write", idSystem);
            organizationModel.WriteACLs("delete", idSystem);

            organizationModel.WriteACLs("folder:create", idSystem, idOrganizationMember);

            organizationModel.WriteACLs("user:create", idSystem);
            organizationModel.WriteACLs("user:read", idSystem, idOrganizationMember);
            organizationModel.WriteACLs("user:write", idSystem);
            organizationModel.WriteACLs("user:delete", idSystem);
            organizationModel.WriteACLs("user:credentials", idSystem);
            organizationModel.WriteACLs("user:identifiers", idSystem);
            organizationModel.WriteACLs("user:impersonate", idSystem);

            organizationModel.WriteACLsForFolder("create", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFolder("read", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFolder("write", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFolder("delete", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFolder("file:create", idSystem, idOrganizationMember);

            organizationModel.WriteACLsForFile("read", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFile("write", idSystem, idOrganizationMember);
            organizationModel.WriteACLsForFile("delete", idSystem, idOrganizationMember);

            await api.Organization.PutAsync(organizationModel);

            await this.ConfigureBackendAsync(organizationModel, configurationModel);

            return(organizationModel);
        }
示例#3
0
        private async Task ConfigureBackendAsync(OrganizationModel organizationModel, BasicOrganizationModel configurationModel)
        {
            // create a private folder to store backend configuration
            var privateFolder = new FolderModel(new FolderIdentifier(organizationModel.Identifier, ":private"))
                                .InitializeEmptyMetadata()
                                .InitializeEmptyPrivileges();

            // write the backend configuration into the folder's metadata
            var backendConfiguration = new BackendConfiguration
            {
                DriverTypeName    = "Documents.Backends.Drivers.FileSystem.Driver, Documents.Backends.Drivers.FileSystem",
                ConfigurationJSON = JsonConvert.SerializeObject(new
                {
                    configurationModel.BasePath
                })
            };

            privateFolder.Write(MetadataKeyConstants.BACKEND_CONFIGURATION, backendConfiguration);
            privateFolder.WriteACLs("read", idSystem);
            privateFolder.WriteACLs("write", idSystem);
            privateFolder.WriteACLs("gateway", idSystem, idOrganizationMember);

            await api.Folder.PutAsync(privateFolder);
        }
示例#4
0
 private OrganizationIdentifier CreateOrganizationIdentifier(BasicOrganizationModel model)
 {
     return(new OrganizationIdentifier(model.OrganizationKey));
 }