Hi,
Identityserver 4 is oauth 2.0 and openid connect framework. If Zapier support oauth2.0(sorry , I don't know zapier much). I think it can be integrated.
Hi,
Please see the docuemnt :https://docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL
Hi
Permission management module is open source, your can see https://github.com/abpframework/abp/blob/dev/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs
PermissionDefinitionProvider derived class, Usually under the Permissions folder of the .Application.Contracts project.int type as the primary key And you don’t need to implement IMultiTenant. You should always switch to the host when operating your own tenant entity.[Authorize(SaasHostPermissions.Tenants.Create)]
public override async Task<SaasTenantDto> CreateAsync(SaasTenantCreateDto input)
{
var currentMyTenant = await _myTenantRepository.FindAsync(x => x.AbpTenantId == CurrentTenant.Id);
using (CurrentTenant.Change(null))
{
var result = await base.CreateAsync(input);
await _myTenantRepository.InsertAsync(new MyTenant()
{
AbpTenantId = result.Id,
MasterTenant = currentMyTenant,
MasterId = currentMyTenant.Id
});
return result;
}
}
If you are using tiered template, Usually caused by not installing redis.
Hi,
This is by design. A tenant must be under the host. But you can do this in the following ways:
var tenantPermission = context.GetPermissionOrNull(SaasHostPermissions.Tenants.Default);
tenantPermission.MultiTenancySide = MultiTenancySides.Both;
foreach (var tenantPermissionChild in tenantPermission.Children)
{
tenantPermissionChild.MultiTenancySide = MultiTenancySides.Both;
}
var editionPermission = context.GetPermissionOrNull(SaasHostPermissions.Editions.Default);
editionPermission.MultiTenancySide = MultiTenancySides.Both;
foreach (var editionPermissionChild in editionPermission.Children)
{
editionPermissionChild.MultiTenancySide = MultiTenancySides.Both;
}
public class TenantInfo : AggregateRoot<Guid>, IMultiTenant
{
public Guid? TenantId { get; }
public Guid RelatedTenantId { get; set; }
public string Name { get; set; }
......
}
[Dependency(ReplaceServices = true)]
[Authorize(SaasHostPermissions.Tenants.Default)]
public class MyTenantService : TenantAppService
{
private readonly IRepository<TenantInfo, Guid> _tenantInfoRepository;
public MyTenantService(
ITenantRepository tenantRepository,
IEditionRepository editionRepository,
ITenantManager tenantManager,
IDataSeeder dataSeeder,
IRepository<TenantInfo, Guid> tenantInfoRepository) :
base(tenantRepository,
editionRepository,
tenantManager,
dataSeeder)
{
_tenantInfoRepository = tenantInfoRepository;
}
[Authorize(SaasHostPermissions.Tenants.Create)]
public override async Task<SaasTenantDto> CreateAsync(SaasTenantCreateDto input)
{
SaasTenantDto result = null;
using (CurrentTenant.Change(null))
{
result = await base.CreateAsync(input);
}
await _tenantInfoRepository.InsertAsync(new TenantInfo()
{
Name = result.Name,
RelatedTenantId = result.Id
});
return result;
}
}
Hi,
Export requires some js. Did you add it? See https://datatables.net/download/release
What version are you using?
Yes, it looks good.