Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions Casbin.UnitTests/Examples/support_count_model.conf
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ r9 = value1, value2, value3, value4, value5, value6, value7, value8, value9
r10= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA
r11= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB
r12= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC
# Not support generic
r13= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD
r14= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE
# Not support generic
r15= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE, valueF

[policy_definition]
p = value1
Expand All @@ -27,8 +29,10 @@ p9 = value1, value2, value3, value4, value5, value6, value7, value8, value9
p10= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA
p11= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB
p12= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC
# Not support generic
p13= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD
p14= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE
# Not support generic
p15= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE, valueF

[role_definition]
g = _, _
Expand All @@ -49,5 +53,7 @@ m9 = r9.value1 == p9.value1 && r9.value2 == p9.value2 && r9.value3 == p9.value3
m10= r10.value1 == p10.value1 && r10.value2 == p10.value2 && r10.value3 == p10.value3 && r10.value4 == p10.value4 && r10.value5 == p10.value5 && r10.value6 == p10.value6 && r10.value7 == p10.value7 && r10.value8 == p10.value8 && r10.value9 == p10.value9 && r10.valueA == p10.valueA
m11= r11.value1 == p11.value1 && r11.value2 == p11.value2 && r11.value3 == p11.value3 && r11.value4 == p11.value4 && r11.value5 == p11.value5 && r11.value6 == p11.value6 && r11.value7 == p11.value7 && r11.value8 == p11.value8 && r11.value9 == p11.value9 && r11.valueA == p11.valueA && r11.valueB == p11.valueB
m12= r12.value1 == p12.value1 && r12.value2 == p12.value2 && r12.value3 == p12.value3 && r12.value4 == p12.value4 && r12.value5 == p12.value5 && r12.value6 == p12.value6 && r12.value7 == p12.value7 && r12.value8 == p12.value8 && r12.value9 == p12.value9 && r12.valueA == p12.valueA && r12.valueB == p12.valueB && r12.valueC == p12.valueC
# Not support generic
m13= r13.value1 == p13.value1 && r13.value2 == p13.value2 && r13.value3 == p13.value3 && r13.value4 == p13.value4 && r13.value5 == p13.value5 && r13.value6 == p13.value6 && r13.value7 == p13.value7 && r13.value8 == p13.value8 && r13.value9 == p13.value9 && r13.valueA == p13.valueA && r13.valueB == p13.valueB && r13.valueC == p13.valueC && r13.valueD == p13.valueD
m14= r14.value1 == p14.value1 && r14.value2 == p14.value2 && r14.value3 == p14.value3 && r14.value4 == p14.value4 && r14.value5 == p14.value5 && r14.value6 == p14.value6 && r14.value7 == p14.value7 && r14.value8 == p14.value8 && r14.value9 == p14.value9 && r14.valueA == p14.valueA && r14.valueB == p14.valueB && r14.valueC == p14.valueC && r14.valueD == p14.valueD && r14.valueE == p14.valueE
# Not support generic
m15= r15.value1 == p15.value1 && r15.value2 == p15.value2 && r15.value3 == p15.value3 && r15.value4 == p15.value4 && r15.value5 == p15.value5 && r15.value6 == p15.value6 && r15.value7 == p15.value7 && r15.value8 == p15.value8 && r15.value9 == p15.value9 && r15.valueA == p15.valueA && r15.valueB == p15.valueB && r15.valueC == p15.valueC && r15.valueD == p15.valueD && r15.valueE == p15.valueE && r15.valueF == p15.valueF
9 changes: 8 additions & 1 deletion Casbin.UnitTests/GenericTests/SupportCountTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class SupportCountTest
[Fact]
public void TestSupportCount()
{
for (int i = 1; i <= 13; i++)
for (int i = 1; i <= 14; i++)
{
IEnforcer enforcer = new Enforcer(DefaultModel.CreateFromText(TestModelFixture.SupportCountModelText));
string policyType = $"p{i}";
Expand Down Expand Up @@ -120,6 +120,13 @@ private static void TestEnforce(IEnforcer enforcer, EnforceContext context, int
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
"value7", "value8", "value9", "value10", "value11", "value12", "value13"));
break;
case 14:
Assert.True(enforcer.Enforce(context, Request.CreateValues("value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11", "value12", "value13", "value14")));
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
"value7", "value8", "value9", "value10", "value11", "value12", "value13", "value14"));
break;
default:
throw new ArgumentOutOfRangeException(nameof(requestCount));
}
Expand Down
2 changes: 2 additions & 0 deletions Casbin/Abstractions/Persist/IPersistPolicy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public interface IPersistPolicy
public string Value10 { get; set; }
public string Value11 { get; set; }
public string Value12 { get; set; }
public string Value13 { get; set; }
public string Value14 { get; set; }
}


Expand Down
2 changes: 2 additions & 0 deletions Casbin/Abstractions/Persist/IReadOnlyPersistPolicy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public interface IReadOnlyPersistPolicy
public string Value10 { get; }
public string Value11 { get; }
public string Value12 { get; }
public string Value13 { get; }
public string Value14 { get; }
}


4 changes: 4 additions & 0 deletions Casbin/Enforcer.Internal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ private bool InternalEnforce<TRequest>(in EnforceContext context, in TRequest re
string, string, string, string>>(in context, requestValues),
12 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
string, string, string, string, string>>(in context, requestValues),
13 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
string, string, string, string, string, string>>(in context, requestValues),
14 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
string, string, string, string, string, string, string>>(in context, requestValues),
_ => InternalEnforce<IRequestValues, IPolicyValues>(in context, requestValues)
};
}
Expand Down
236 changes: 236 additions & 0 deletions Casbin/Extensions/Enforcer/EnforcerExtension.GenericEnforce.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1185,4 +1185,240 @@ public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
}

#endregion

#region Generic Enforce Count 13

public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1,
T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
return enforcer.Enforce(enforcer.CreateContext(), request);
}

public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
return enforcer.EnforceAsync(enforcer.CreateContext(), request);
}

public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
return enforcer.Enforce(context, request);
}

public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
return enforcer.EnforceAsync(context, request);
}

public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
EnforceEx<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1, T2 value2,
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContext(true);
bool result = enforcer.Enforce(context, request);
return (result, context.Explanations);
}

public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
EnforceExAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1, T2 value2,
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContext(true);
bool result = await enforcer.EnforceAsync(context, request);
return (result, context.Explanations);
}

public static bool EnforceWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
return enforcer.Enforce(context, request);
}

public static Task<bool> EnforceWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
this IEnforcer enforcer, string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6,
T7 value7, T8 value8, T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
return enforcer.EnforceAsync(context, request);
}

public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
EnforceExWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, string matcher,
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9,
T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
bool result = enforcer.Enforce(context, request);
return (result, context.Explanations);
}

public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
EnforceExWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
bool result = await enforcer.EnforceAsync(context, request);
return (result, context.Explanations);
}

#endregion

#region Generic Enforce Count 14

public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1,
T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
return enforcer.Enforce(enforcer.CreateContext(), request);
}

public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
return enforcer.EnforceAsync(enforcer.CreateContext(), request);
}

public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
return enforcer.Enforce(context, request);
}

public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
return enforcer.EnforceAsync(context, request);
}

public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
EnforceEx<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1, T2 value2,
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContext(true);
bool result = enforcer.Enforce(context, request);
return (result, context.Explanations);
}

public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
EnforceExAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1, T2 value2,
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContext(true);
bool result = await enforcer.EnforceAsync(context, request);
return (result, context.Explanations);
}

public static bool EnforceWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
return enforcer.Enforce(context, request);
}

public static Task<bool> EnforceWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
this IEnforcer enforcer, string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6,
T7 value7, T8 value8, T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
return enforcer.EnforceAsync(context, request);
}

public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
EnforceExWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, string matcher,
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9,
T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
bool result = enforcer.Enforce(context, request);
return (result, context.Explanations);
}

public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
EnforceExWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
{
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
value10,
value11, value12, value13, value14);
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
bool result = await enforcer.EnforceAsync(context, request);
return (result, context.Explanations);
}

#endregion
}
Loading
Loading