Multi-tenant role authorization

This commit is contained in:
Shaun Walker
2019-08-25 14:52:25 -04:00
parent ad2d865d7c
commit f037898c6e
34 changed files with 312 additions and 252 deletions

View File

@ -8,7 +8,7 @@ using System.Linq;
namespace Oqtane.Repository
{
public class DBContextBase : IdentityDbContext<IdentityUser>
public class DBContextBase : IdentityUserContext<IdentityUser>
{
private Tenant tenant;
private IHttpContextAccessor accessor;

View File

@ -4,6 +4,7 @@ namespace Oqtane.Repository
{
public interface ITenantResolver
{
Alias GetAlias();
Tenant GetTenant();
}
}

View File

@ -7,6 +7,7 @@ namespace Oqtane.Repository
{
IEnumerable<UserRole> GetUserRoles();
IEnumerable<UserRole> GetUserRoles(int UserId);
IEnumerable<UserRole> GetUserRoles(int UserId, int SiteId);
UserRole AddUserRole(UserRole UserRole);
UserRole UpdateUserRole(UserRole UserRole);
UserRole GetUserRole(int UserRoleId);

View File

@ -32,14 +32,25 @@ namespace Oqtane.Repository
}
}
public Tenant GetTenant()
public Alias GetAlias()
{
try
{
IEnumerable<Alias> aliases = _aliasrepository.GetAliases(); // cached
Alias alias = aliases.Where(item => item.Name == aliasname).FirstOrDefault();
return aliases.Where(item => item.Name == aliasname).FirstOrDefault();
}
catch
{
throw;
}
}
public Tenant GetTenant()
{
try
{
IEnumerable<Tenant> tenants = _tenantrepository.GetTenants(); // cached
return tenants.Where(item => item.TenantId == alias.TenantId).FirstOrDefault();
return tenants.Where(item => item.TenantId == GetAlias().TenantId).FirstOrDefault();
}
catch
{

View File

@ -39,6 +39,21 @@ namespace Oqtane.Repository
}
}
public IEnumerable<UserRole> GetUserRoles(int UserId, int SiteId)
{
try
{
return db.UserRole.Where(item => item.UserId == UserId)
.Include(item => item.Role) // eager load roles
.Where(item => item.Role.SiteId == SiteId)
.ToList();
}
catch
{
throw;
}
}
public UserRole AddUserRole(UserRole UserRole)
{
try