Skip to content

Commit 80c72ed

Browse files
feat: extend policy size limit from 12 to 14 parameters (#388)
1 parent 999b3f4 commit 80c72ed

12 files changed

Lines changed: 697 additions & 30 deletions

File tree

Casbin.UnitTests/Examples/support_count_model.conf

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ r9 = value1, value2, value3, value4, value5, value6, value7, value8, value9
1111
r10= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA
1212
r11= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB
1313
r12= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC
14-
# Not support generic
1514
r13= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD
15+
r14= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE
16+
# Not support generic
17+
r15= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE, valueF
1618

1719
[policy_definition]
1820
p = value1
@@ -27,8 +29,10 @@ p9 = value1, value2, value3, value4, value5, value6, value7, value8, value9
2729
p10= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA
2830
p11= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB
2931
p12= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC
30-
# Not support generic
3132
p13= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD
33+
p14= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE
34+
# Not support generic
35+
p15= value1, value2, value3, value4, value5, value6, value7, value8, value9, valueA, valueB, valueC, valueD, valueE, valueF
3236

3337
[role_definition]
3438
g = _, _
@@ -49,5 +53,7 @@ m9 = r9.value1 == p9.value1 && r9.value2 == p9.value2 && r9.value3 == p9.value3
4953
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
5054
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
5155
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
52-
# Not support generic
5356
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
57+
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
58+
# Not support generic
59+
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

Casbin.UnitTests/GenericTests/SupportCountTest.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class SupportCountTest
1212
[Fact]
1313
public void TestSupportCount()
1414
{
15-
for (int i = 1; i <= 13; i++)
15+
for (int i = 1; i <= 14; i++)
1616
{
1717
IEnforcer enforcer = new Enforcer(DefaultModel.CreateFromText(TestModelFixture.SupportCountModelText));
1818
string policyType = $"p{i}";
@@ -120,6 +120,13 @@ private static void TestEnforce(IEnforcer enforcer, EnforceContext context, int
120120
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
121121
"value7", "value8", "value9", "value10", "value11", "value12", "value13"));
122122
break;
123+
case 14:
124+
Assert.True(enforcer.Enforce(context, Request.CreateValues("value1", "value2", "value3",
125+
"value4", "value5", "value6", "value7", "value8", "value9",
126+
"value10", "value11", "value12", "value13", "value14")));
127+
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
128+
"value7", "value8", "value9", "value10", "value11", "value12", "value13", "value14"));
129+
break;
123130
default:
124131
throw new ArgumentOutOfRangeException(nameof(requestCount));
125132
}

Casbin/Abstractions/Persist/IPersistPolicy.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public interface IPersistPolicy
1616
public string Value10 { get; set; }
1717
public string Value11 { get; set; }
1818
public string Value12 { get; set; }
19+
public string Value13 { get; set; }
20+
public string Value14 { get; set; }
1921
}
2022

2123

Casbin/Abstractions/Persist/IReadOnlyPersistPolicy.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public interface IReadOnlyPersistPolicy
1616
public string Value10 { get; }
1717
public string Value11 { get; }
1818
public string Value12 { get; }
19+
public string Value13 { get; }
20+
public string Value14 { get; }
1921
}
2022

2123

Casbin/Enforcer.Internal.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ private bool InternalEnforce<TRequest>(in EnforceContext context, in TRequest re
5858
string, string, string, string>>(in context, requestValues),
5959
12 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
6060
string, string, string, string, string>>(in context, requestValues),
61+
13 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
62+
string, string, string, string, string, string>>(in context, requestValues),
63+
14 => InternalEnforce<TRequest, PolicyValues<string, string, string, string, string, string, string,
64+
string, string, string, string, string, string, string>>(in context, requestValues),
6165
_ => InternalEnforce<IRequestValues, IPolicyValues>(in context, requestValues)
6266
};
6367
}

Casbin/Extensions/Enforcer/EnforcerExtension.GenericEnforce.cs

Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,4 +1185,240 @@ public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
11851185
}
11861186

11871187
#endregion
1188+
1189+
#region Generic Enforce Count 13
1190+
1191+
public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1,
1192+
T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
1193+
T11 value11, T12 value12, T13 value13)
1194+
{
1195+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1196+
value10,
1197+
value11, value12, value13);
1198+
return enforcer.Enforce(enforcer.CreateContext(), request);
1199+
}
1200+
1201+
public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
1202+
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
1203+
T11 value11, T12 value12, T13 value13)
1204+
{
1205+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1206+
value10,
1207+
value11, value12, value13);
1208+
return enforcer.EnforceAsync(enforcer.CreateContext(), request);
1209+
}
1210+
1211+
public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
1212+
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1213+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
1214+
{
1215+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1216+
value10,
1217+
value11, value12, value13);
1218+
return enforcer.Enforce(context, request);
1219+
}
1220+
1221+
public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
1222+
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1223+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
1224+
{
1225+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1226+
value10,
1227+
value11, value12, value13);
1228+
return enforcer.EnforceAsync(context, request);
1229+
}
1230+
1231+
public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
1232+
EnforceEx<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1, T2 value2,
1233+
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
1234+
T12 value12, T13 value13)
1235+
{
1236+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1237+
value10,
1238+
value11, value12, value13);
1239+
EnforceContext context = enforcer.CreateContext(true);
1240+
bool result = enforcer.Enforce(context, request);
1241+
return (result, context.Explanations);
1242+
}
1243+
1244+
public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
1245+
EnforceExAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, T1 value1, T2 value2,
1246+
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
1247+
T12 value12, T13 value13)
1248+
{
1249+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1250+
value10,
1251+
value11, value12, value13);
1252+
EnforceContext context = enforcer.CreateContext(true);
1253+
bool result = await enforcer.EnforceAsync(context, request);
1254+
return (result, context.Explanations);
1255+
}
1256+
1257+
public static bool EnforceWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
1258+
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1259+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
1260+
{
1261+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1262+
value10,
1263+
value11, value12, value13);
1264+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
1265+
return enforcer.Enforce(context, request);
1266+
}
1267+
1268+
public static Task<bool> EnforceWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
1269+
this IEnforcer enforcer, string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6,
1270+
T7 value7, T8 value8, T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
1271+
{
1272+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1273+
value10,
1274+
value11, value12, value13);
1275+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
1276+
return enforcer.EnforceAsync(context, request);
1277+
}
1278+
1279+
public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
1280+
EnforceExWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer, string matcher,
1281+
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9,
1282+
T10 value10, T11 value11, T12 value12, T13 value13)
1283+
{
1284+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1285+
value10,
1286+
value11, value12, value13);
1287+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
1288+
bool result = enforcer.Enforce(context, request);
1289+
return (result, context.Explanations);
1290+
}
1291+
1292+
public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
1293+
EnforceExWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this IEnforcer enforcer,
1294+
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1295+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13)
1296+
{
1297+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1298+
value10,
1299+
value11, value12, value13);
1300+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
1301+
bool result = await enforcer.EnforceAsync(context, request);
1302+
return (result, context.Explanations);
1303+
}
1304+
1305+
#endregion
1306+
1307+
#region Generic Enforce Count 14
1308+
1309+
public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1,
1310+
T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
1311+
T11 value11, T12 value12, T13 value13, T14 value14)
1312+
{
1313+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1314+
value10,
1315+
value11, value12, value13, value14);
1316+
return enforcer.Enforce(enforcer.CreateContext(), request);
1317+
}
1318+
1319+
public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
1320+
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10,
1321+
T11 value11, T12 value12, T13 value13, T14 value14)
1322+
{
1323+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1324+
value10,
1325+
value11, value12, value13, value14);
1326+
return enforcer.EnforceAsync(enforcer.CreateContext(), request);
1327+
}
1328+
1329+
public static bool Enforce<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
1330+
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1331+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1332+
{
1333+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1334+
value10,
1335+
value11, value12, value13, value14);
1336+
return enforcer.Enforce(context, request);
1337+
}
1338+
1339+
public static Task<bool> EnforceAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
1340+
EnforceContext context, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1341+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1342+
{
1343+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1344+
value10,
1345+
value11, value12, value13, value14);
1346+
return enforcer.EnforceAsync(context, request);
1347+
}
1348+
1349+
public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
1350+
EnforceEx<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1, T2 value2,
1351+
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
1352+
T12 value12, T13 value13, T14 value14)
1353+
{
1354+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1355+
value10,
1356+
value11, value12, value13, value14);
1357+
EnforceContext context = enforcer.CreateContext(true);
1358+
bool result = enforcer.Enforce(context, request);
1359+
return (result, context.Explanations);
1360+
}
1361+
1362+
public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
1363+
EnforceExAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, T1 value1, T2 value2,
1364+
T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9, T10 value10, T11 value11,
1365+
T12 value12, T13 value13, T14 value14)
1366+
{
1367+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1368+
value10,
1369+
value11, value12, value13, value14);
1370+
EnforceContext context = enforcer.CreateContext(true);
1371+
bool result = await enforcer.EnforceAsync(context, request);
1372+
return (result, context.Explanations);
1373+
}
1374+
1375+
public static bool EnforceWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
1376+
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1377+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1378+
{
1379+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1380+
value10,
1381+
value11, value12, value13, value14);
1382+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
1383+
return enforcer.Enforce(context, request);
1384+
}
1385+
1386+
public static Task<bool> EnforceWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
1387+
this IEnforcer enforcer, string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6,
1388+
T7 value7, T8 value8, T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1389+
{
1390+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1391+
value10,
1392+
value11, value12, value13, value14);
1393+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher);
1394+
return enforcer.EnforceAsync(context, request);
1395+
}
1396+
1397+
public static (bool Result, IEnumerable<IEnumerable<string>> Explains)
1398+
EnforceExWithMatcher<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer, string matcher,
1399+
T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8, T9 value9,
1400+
T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1401+
{
1402+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1403+
value10,
1404+
value11, value12, value13, value14);
1405+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
1406+
bool result = enforcer.Enforce(context, request);
1407+
return (result, context.Explanations);
1408+
}
1409+
1410+
public static async Task<(bool Result, IEnumerable<IEnumerable<string>> Explains)>
1411+
EnforceExWithMatcherAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this IEnforcer enforcer,
1412+
string matcher, T1 value1, T2 value2, T3 value3, T4 value4, T5 value5, T6 value6, T7 value7, T8 value8,
1413+
T9 value9, T10 value10, T11 value11, T12 value12, T13 value13, T14 value14)
1414+
{
1415+
var request = Request.CreateValues(value1, value2, value3, value4, value5, value6, value7, value8, value9,
1416+
value10,
1417+
value11, value12, value13, value14);
1418+
EnforceContext context = enforcer.CreateContextWithMatcher(matcher, true);
1419+
bool result = await enforcer.EnforceAsync(context, request);
1420+
return (result, context.Explanations);
1421+
}
1422+
1423+
#endregion
11881424
}

0 commit comments

Comments
 (0)