#25 default policy

This commit is contained in:
Hamid Reza Mohammadi 2020-10-31 19:25:15 +03:30
parent ef070fecfb
commit 33fd4f2442
3 changed files with 39 additions and 4 deletions

View File

@ -154,6 +154,13 @@ namespace RMuseum
services.AddAuthorization(options =>
{
//this is the default policy to make sure the use session has not yet been deleted by him/her from another client
//or by an addmin (Authorize with no policy should fail on deleted sessions)
var defPolicy = new AuthorizationPolicyBuilder();
defPolicy.Requirements.Add(new UserGroupPermissionRequirement("null", "null"));
options.DefaultPolicy = defPolicy.Build();
foreach (SecurableItem Item in RMuseumSecurableItem.Items)
{
foreach (SecurableItemOperation Operation in Item.Operations)

View File

@ -27,6 +27,21 @@ namespace RSecurityBackend.Authorization
return;
}
//this is the default policy to make sure the use session has not yet been deleted by him/her from another client
//or by an addmin (Authorize with no policy should fail on deleted sessions)
if (requirement.SecurableItemShortName == "null"/* && requirement.OperationShortName == "null"*/)
{
RServiceResult<bool> sessionCheckResult = await _appUserService.SessionExists(new Guid(context.User.Claims.FirstOrDefault(c => c.Type == "UserId").Value), new Guid(context.User.Claims.FirstOrDefault(c => c.Type == "SessionId").Value));
if (!string.IsNullOrEmpty(sessionCheckResult.ExceptionString) || !sessionCheckResult.Result)
{
context.Fail();
return;
}
context.Succeed(requirement);
return;
}
RServiceResult<bool> result = await _userPermissionChecker.Check
(
new Guid(context.User.Claims.FirstOrDefault(c => c.Type == "UserId").Value),
@ -51,14 +66,21 @@ namespace RSecurityBackend.Authorization
/// </summary>
private IUserPermissionChecker _userPermissionChecker;
/// <summary>
/// IAppUserService instance
/// </summary>
protected IAppUserService _appUserService;
/// <summary>
/// constructor
/// </summary>
/// <param name="userPermissionChecker"></param>
public UserGroupPermissionHandler(IUserPermissionChecker userPermissionChecker) : base()
/// <param name="appUserService"></param>
public UserGroupPermissionHandler(IUserPermissionChecker userPermissionChecker, IAppUserService appUserService) : base()
{
_userPermissionChecker = userPermissionChecker;
_userPermissionChecker = userPermissionChecker;
_appUserService = appUserService;
}
}
}

View File

@ -22,11 +22,17 @@
IUserPermissionChecker instance
</summary>
</member>
<member name="M:RSecurityBackend.Authorization.UserGroupPermissionHandler.#ctor(RSecurityBackend.Services.IUserPermissionChecker)">
<member name="F:RSecurityBackend.Authorization.UserGroupPermissionHandler._appUserService">
<summary>
IAppUserService instance
</summary>
</member>
<member name="M:RSecurityBackend.Authorization.UserGroupPermissionHandler.#ctor(RSecurityBackend.Services.IUserPermissionChecker,RSecurityBackend.Services.IAppUserService)">
<summary>
constructor
</summary>
<param name="userPermissionChecker"></param>
<param name="appUserService"></param>
</member>
<member name="T:RSecurityBackend.Authorization.UserGroupPermissionRequirement">
<summary>