Browse Source

Added ICurrentUser (instead of IAbpSession).

pull/138/head
Halil İbrahim Kalkan 9 years ago
parent
commit
af566b3c47
  1. 12
      src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Views/Shared/Components/AbpMenu/Default.cshtml
  2. 18
      src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/HttpContextCurrentPrincipalAccessor.cs
  3. 4
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs
  4. 2
      src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs
  5. 34
      src/Volo.Abp/Volo/Abp/Security/Claims/AbpClaimTypes.cs
  6. 9
      src/Volo.Abp/Volo/Abp/Security/Claims/ICurrentPrincipalAccessor.cs
  7. 11
      src/Volo.Abp/Volo/Abp/Security/Claims/ThreadCurrentPrincipalAccessor.cs
  8. 60
      src/Volo.Abp/Volo/Abp/Session/CurrentUser.cs
  9. 23
      src/Volo.Abp/Volo/Abp/Session/ICurrentUser.cs

12
src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/Views/Shared/Components/AbpMenu/Default.cshtml

@ -1,6 +1,8 @@
@using System.Threading.Tasks
@using Volo.Abp.Session
@using Volo.Abp.Ui.Navigation
@model Volo.Abp.Ui.Navigation.ApplicationMenu
@model ApplicationMenu
@inject ICurrentUser CurrentUser
<nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse fixed-top">
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
@ -33,11 +35,15 @@
}
</ul>
@if (Context.User?.Identity?.IsAuthenticated == true)
@if (CurrentUser.IsAuthenticated)
{
<div>
<a href="/Account/Logout">Logout</a> /* TODO: ?? */
<span style="color: #fff">@CurrentUser.UserName</span> (<a href="/Account/Logout">Logout</a>)
</div>
}
else
{
<a href="/Account/Login">Login</a>
}
</div>
</nav>

18
src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/HttpContextCurrentPrincipalAccessor.cs

@ -0,0 +1,18 @@
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.AspNetCore.Security.Claims
{
public class HttpContextCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
public override ClaimsPrincipal Principal => _httpContextAccessor.HttpContext?.User ?? base.Principal;
private readonly IHttpContextAccessor _httpContextAccessor;
public HttpContextCurrentPrincipalAccessor(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
}

4
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenancyManager.cs

@ -76,6 +76,8 @@ namespace Volo.Abp.MultiTenancy
return _tenantScopeProvider.CurrentScope.Tenant;
}
//TODO: Get from ICurrentUser before resolvers and fail if resolvers find a different tenant!
return GetCurrentTenantFromResolvers();
}
@ -94,7 +96,7 @@ namespace Volo.Abp.MultiTenancy
{
tenantResolver.Resolve(context);
if (context.ResolvedTenantOrHost())
if (context.HasResolvedTenantOrHost())
{
if (context.TenantIdOrName == null)
{

2
src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantResolveContext.cs

@ -10,7 +10,7 @@ namespace Volo.Abp.MultiTenancy
public bool Handled { get; set; }
internal bool ResolvedTenantOrHost()
internal bool HasResolvedTenantOrHost()
{
return Handled || TenantIdOrName != null;
}

34
src/Volo.Abp/Volo/Abp/Security/Claims/AbpClaimTypes.cs

@ -0,0 +1,34 @@
using System.Security.Claims;
namespace Volo.Abp.Security.Claims
{
/// <summary>
/// Used to get ABP-specific claim type names.
/// </summary>
public static class AbpClaimTypes
{
/// <summary>
/// UserId.
/// Default: <see cref="ClaimTypes.Name"/>
/// </summary>
public static string UserName { get; set; } = ClaimTypes.Name;
/// <summary>
/// UserId.
/// Default: <see cref="ClaimTypes.NameIdentifier"/>
/// </summary>
public static string UserId { get; set; } = ClaimTypes.NameIdentifier;
/// <summary>
/// UserId.
/// Default: <see cref="ClaimTypes.Role"/>
/// </summary>
public static string Role { get; set; } = ClaimTypes.Role;
/// <summary>
/// UserId.
/// Default: <see cref="ClaimTypes.Email"/>
/// </summary>
public static string Email { get; set; } = ClaimTypes.Email;
}
}

9
src/Volo.Abp/Volo/Abp/Security/Claims/ICurrentPrincipalAccessor.cs

@ -0,0 +1,9 @@
using System.Security.Claims;
namespace Volo.Abp.Security.Claims
{
public interface ICurrentPrincipalAccessor
{
ClaimsPrincipal Principal { get; }
}
}

11
src/Volo.Abp/Volo/Abp/Security/Claims/ThreadCurrentPrincipalAccessor.cs

@ -0,0 +1,11 @@
using System.Security.Claims;
using System.Threading;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Security.Claims
{
public class ThreadCurrentPrincipalAccessor : ICurrentPrincipalAccessor, ISingletonDependency
{
public virtual ClaimsPrincipal Principal => Thread.CurrentPrincipal as ClaimsPrincipal;
}
}

60
src/Volo.Abp/Volo/Abp/Session/CurrentUser.cs

@ -0,0 +1,60 @@
using System;
using System.Linq;
using System.Security.Claims;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.Session
{
public class CurrentUser : ICurrentUser, ITransientDependency //TODO: Singleton?
{
public virtual bool IsAuthenticated => Id.HasValue;
public virtual Guid? Id
{
get
{
var value = FindClaimValue(AbpClaimTypes.UserId);
if (value == null)
{
return null;
}
return Guid.Parse(value);
}
}
public virtual string UserName => FindClaimValue(AbpClaimTypes.UserName);
public virtual string Email => FindClaimValue(AbpClaimTypes.Email);
private readonly ICurrentPrincipalAccessor _principalAccessor;
public CurrentUser(ICurrentPrincipalAccessor principalAccessor)
{
_principalAccessor = principalAccessor;
}
public virtual Claim FindClaim(string claimType)
{
return _principalAccessor.Principal?.Claims.FirstOrDefault(c => c.Type == claimType);
}
public virtual T FindClaimValue<T>(string claimType)
where T : struct
{
var value = FindClaimValue(claimType);
if (value == null)
{
return default(T);
}
return value.To<T>();
}
public virtual string FindClaimValue(string claimType)
{
return FindClaim(claimType)?.Value;
}
}
}

23
src/Volo.Abp/Volo/Abp/Session/ICurrentUser.cs

@ -0,0 +1,23 @@
using System;
using System.Security.Claims;
namespace Volo.Abp.Session
{
public interface ICurrentUser
{
bool IsAuthenticated { get; }
Guid? Id { get; }
string UserName { get; }
string Email { get; }
Claim FindClaim(string claimType);
string FindClaimValue(string claimType);
T FindClaimValue<T>(string claimType)
where T : struct;
}
}
Loading…
Cancel
Save