@@ -45,4 +45,81 @@ describe("Enforcer tests", function ()
4545 local e = Enforcer :new (model , policy )
4646 assert .is .True (e :enforce (" cathy" , " /cathy_data" , " GET" ))
4747 end )
48+
49+ it (" abac sub_rule test" , function ()
50+ local model = path .. " /examples/abac_rule_model.conf"
51+ local policy = path .. " /examples/abac_rule_policy.csv"
52+ local sub1 = {
53+ Name = " Alice" ,
54+ Age = 16
55+ }
56+ local sub2 = {
57+ Name = " Bob" ,
58+ Age = 20
59+ }
60+ local sub3 = {
61+ Name = " Alice" ,
62+ Age = 65
63+ }
64+ local e = Enforcer :new (model , policy )
65+ assert .is .False (e :enforce (sub1 , " /data1" , " read" ))
66+ assert .is .False (e :enforce (sub1 , " /data2" , " read" ))
67+ assert .is .False (e :enforce (sub1 , " /data1" , " write" ))
68+ assert .is .True (e :enforce (sub1 , " /data2" , " write" ))
69+
70+ assert .is .True (e :enforce (sub2 , " /data1" , " read" ))
71+ assert .is .False (e :enforce (sub2 , " /data2" , " read" ))
72+ assert .is .False (e :enforce (sub2 , " /data1" , " write" ))
73+ assert .is .True (e :enforce (sub2 , " /data2" , " write" ))
74+
75+ assert .is .False (e :enforce (sub3 , " /data1" , " write" ))
76+ assert .is .True (e :enforce (sub3 , " /data1" , " read" ))
77+ assert .is .False (e :enforce (sub3 , " /data2" , " read" ))
78+ assert .is .True (e :enforce (sub1 , " /data2" , " write" ))
79+ end )
80+
81+ it (" in of matcher test" , function ()
82+ local model = path .. " /examples/in_matcher_model.conf"
83+ local policy = path .. " /examples/in_matcher_policy.csv"
84+
85+ local e = Enforcer :new (model , policy )
86+ assert .is .True (e :enforce (" alice" , " data1" , " read" ))
87+ assert .is .True (e :enforce (" alice" , " data1" , " write" ))
88+ assert .is .False (e :enforce (" alice" , " data2" , " read" ))
89+ assert .is .False (e :enforce (" alice" , " data2" , " write" ))
90+
91+ assert .is .False (e :enforce (" bob" , " data1" , " read" ))
92+ assert .is .False (e :enforce (" bob" , " data1" , " write" ))
93+ assert .is .True (e :enforce (" bob" , " data2" , " read" ))
94+ assert .is .True (e :enforce (" bob" , " data2" , " write" ))
95+ end )
96+
97+ it (" explicit priority test" , function ()
98+ local model = path .. " /examples/priority_model_explicit.conf"
99+ local policy = path .. " /examples/priority_policy_explicit.csv"
100+
101+ local e = Enforcer :new (model , policy )
102+ assert .is .True (e :enforce (" alice" , " data1" , " write" ))
103+ assert .is .True (e :enforce (" alice" , " data1" , " read" ))
104+ assert .is .False (e :enforce (" bob" , " data2" , " read" ))
105+ assert .is .True (e :enforce (" bob" , " data2" , " write" ))
106+ assert .is .False (e :enforce (" data1_deny_group" , " data1" , " read" ))
107+ assert .is .False (e :enforce (" data1_deny_group" , " data1" , " write" ))
108+ assert .is .True (e :enforce (" data2_allow_group" , " data2" , " read" ))
109+ assert .is .True (e :enforce (" data2_allow_group" , " data2" , " write" ))
110+
111+ local rule = {" 1" , " bob" , " data2" , " write" , " deny" }
112+ e .model :addPolicy (" p" , " p" , rule )
113+ e .model :sortPoliciesByPriority ()
114+ e .model :printPolicy ()
115+
116+ assert .is .True (e :enforce (" alice" , " data1" , " write" ))
117+ assert .is .True (e :enforce (" alice" , " data1" , " read" ))
118+ assert .is .False (e :enforce (" bob" , " data2" , " read" ))
119+ assert .is .False (e :enforce (" bob" , " data2" , " write" ))
120+ assert .is .False (e :enforce (" data1_deny_group" , " data1" , " read" ))
121+ assert .is .False (e :enforce (" data1_deny_group" , " data1" , " write" ))
122+ assert .is .True (e :enforce (" data2_allow_group" , " data2" , " read" ))
123+ assert .is .True (e :enforce (" data2_allow_group" , " data2" , " write" ))
124+ end )
48125end )
0 commit comments