Skip to content

Commit

Permalink
feat: Add KeyMatch request transformer from CustomRequestTransformer
Browse files Browse the repository at this point in the history
Signed-off-by: Sagilio <[email protected]>
  • Loading branch information
sagilio committed Mar 11, 2021
1 parent 64cc1dc commit dbabfa7
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 73 deletions.
2 changes: 1 addition & 1 deletion samples/WebApplicationSample/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void ConfigureServices(IServiceCollection services)

// Comment line below to use the default BasicRequestTransformer
// Note: Commenting the line means that the action methods MUST have [CasbinAuthorize()] attribute which explicitly specifies obj and policy. Otherwise authorization will be denied
options.DefaultRequestTransformer = new CustomRequestTransformer();
options.DefaultRequestTransformer = new KeyMatchRequestTransformer();
});
}

Expand Down
16 changes: 10 additions & 6 deletions src/Casbin.AspNetCore.Core/Transformers/BasicRequestTransformer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ public override ValueTask<IEnumerable<object>> TransformAsync(ICasbinAuthorizati
{
object[] requestValues = new object[data.ValueCount + 1];
requestValues[0] = SubTransform(context, data);
requestValues[1] = ObjTransform(context, data, d => d.Value1);
requestValues[2] = ActTransform(context, data, d => d.Value2);

requestValues[1] = ObjTransform(context, data,
(_, d) => d.Value1);
requestValues[2] = ActTransform(context, data,
(_, d) => d.Value2);
return new ValueTask<IEnumerable<object>>(requestValues);
}

Expand All @@ -35,10 +38,11 @@ protected virtual string SubTransform(ICasbinAuthorizationContext context, ICasb
return claim is null ? string.Empty : claim.Value;
}

protected virtual string ObjTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func<ICasbinAuthorizationData, string> valueSelector)
=> valueSelector(data);
protected virtual string ObjTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data,
Func<ICasbinAuthorizationContext, ICasbinAuthorizationData, string> valueSelector)
=> valueSelector(context, data);

protected virtual string ActTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func<ICasbinAuthorizationData, string> valueSelector)
=> valueSelector(data);
protected virtual string ActTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func<ICasbinAuthorizationContext, ICasbinAuthorizationData, string> valueSelector)
=> valueSelector(context, data);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Casbin.AspNetCore.Authorization.Transformers
{
public class KeyMatchRequestTransformer : BasicRequestTransformer
{
public override ValueTask<IEnumerable<object>> TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
{
object[] requestValues = new object[3];
requestValues[0] = SubTransform(context, data);

requestValues[1] = ObjTransform(context, data, (c, _) =>
c.HttpContext.Request.Path);
requestValues[2] = ActTransform(context, data, (c, _) =>
c.HttpContext.Request.Method);
return new ValueTask<IEnumerable<object>>(requestValues);
}
}
}
19 changes: 12 additions & 7 deletions src/Casbin.AspNetCore.Core/Transformers/RbacRequestTransformer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,27 @@ public override ValueTask<IEnumerable<object>> TransformAsync(ICasbinAuthorizati
switch (requestValues.Length)
{
case 3:
requestValues[1] = ObjTransform(context, data, d => d.Value1);
requestValues[2] = ActTransform(context, data, d => d.Value2);
requestValues[1] = ObjTransform(context, data,
(_, d) => d.Value1);
requestValues[2] = ActTransform(context, data,
(_, d) => d.Value2);
break;
case 4:
requestValues[1] = DomTransform(context, data, d => d.Value1);
requestValues[2] = ObjTransform(context, data, d => d.Value2);
requestValues[3] = ActTransform(context, data, d => d.Value3);
requestValues[1] = DomTransform(context, data,
(_, d) => d.Value1);
requestValues[2] = ObjTransform(context, data,
(_, d) => d.Value2);
requestValues[3] = ActTransform(context, data,
(_, d) => d.Value3);
break;
}

return new ValueTask<IEnumerable<object>>(requestValues);
}

protected virtual string DomTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func<ICasbinAuthorizationData, string> valueSelector)
protected virtual string DomTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func<ICasbinAuthorizationContext, ICasbinAuthorizationData, string> valueSelector)
{
return valueSelector(data);
return valueSelector(context, data);
}
}
}

0 comments on commit dbabfa7

Please sign in to comment.