@@ -674,8 +674,8 @@ test('TestEnforceEx', async () => {
674674
675675 await e . addPermissionForUser ( 'alice' , 'data1' , 'invalid' ) ;
676676
677- testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ false , [ ] ] ) ;
678- testEnforceEx ( e , 'alice' , 'data1' , 'invalid' , [ true , [ 'alice' , 'data1' , 'invalid' ] ] ) ;
677+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ false , [ ] ] ) ;
678+ await testEnforceEx ( e , 'alice' , 'data1' , 'invalid' , [ true , [ 'alice' , 'data1' , 'invalid' ] ] ) ;
679679} ) ;
680680
681681test ( 'TestSyncEnforceEx' , async ( ) => {
@@ -718,45 +718,90 @@ test('TestKeyGet2', async () => {
718718
719719test ( 'TestEnforceExWithRBACDenyModel' , async ( ) => {
720720 const e = await newEnforcer ( 'examples/rbac_with_deny_model.conf' , 'examples/rbac_with_deny_policy.csv' ) ;
721- testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
722- testEnforceEx ( e , 'bob' , 'data2' , 'write' , [ true , [ 'bob' , 'data2' , 'write' , 'allow' ] ] ) ;
723- testEnforceEx ( e , 'alice' , 'data2' , 'write' , [ false , [ 'alice' , 'data2' , 'write' , 'deny' ] ] ) ;
724- testEnforceEx ( e , 'data2_admin' , 'data2' , 'read' , [ true , [ 'data2_admin' , 'data2' , 'read' , 'allow' ] ] ) ;
725- testEnforceEx ( e , 'data2_admin' , 'data2' , 'write' , [ true , [ 'data2_admin' , 'data2' , 'write' , 'allow' ] ] ) ;
726- testEnforceEx ( e , 'data2_admin' , 'data1' , 'read' , [ false , [ ] ] ) ;
727- testEnforceEx ( e , 'data2_admin' , 'data1' , 'write' , [ false , [ ] ] ) ;
721+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
722+ await testEnforceEx ( e , 'bob' , 'data2' , 'write' , [ true , [ 'bob' , 'data2' , 'write' , 'allow' ] ] ) ;
723+ await testEnforceEx ( e , 'alice' , 'data2' , 'write' , [ false , [ 'alice' , 'data2' , 'write' , 'deny' ] ] ) ;
724+ await testEnforceEx ( e , 'data2_admin' , 'data2' , 'read' , [ true , [ 'data2_admin' , 'data2' , 'read' , 'allow' ] ] ) ;
725+ await testEnforceEx ( e , 'data2_admin' , 'data2' , 'write' , [ true , [ 'data2_admin' , 'data2' , 'write' , 'allow' ] ] ) ;
726+ await testEnforceEx ( e , 'data2_admin' , 'data1' , 'read' , [ false , [ ] ] ) ;
727+ await testEnforceEx ( e , 'data2_admin' , 'data1' , 'write' , [ false , [ ] ] ) ;
728728} ) ;
729729
730730test ( 'TestEnforceExWithGlobModel' , async ( ) => {
731731 const e = await newEnforcer ( 'examples/glob_model.conf' , 'examples/glob_policy.csv' ) ;
732- testEnforceEx ( e , 'u1' , '/foo/1' , 'read' , [ true , [ 'u1' , '/foo/*' , 'read' ] ] ) ;
733- testEnforceEx ( e , 'u2' , '/foo1' , 'read' , [ true , [ 'u2' , '/foo*' , 'read' ] ] ) ;
734- testEnforceEx ( e , 'u3' , '/foo/2' , 'read' , [ false , [ ] ] ) ;
732+ await testEnforceEx ( e , 'u1' , '/foo/1' , 'read' , [ true , [ 'u1' , '/foo/*' , 'read' ] ] ) ;
733+ await testEnforceEx ( e , 'u2' , '/foo1' , 'read' , [ true , [ 'u2' , '/foo*' , 'read' ] ] ) ;
734+ await testEnforceEx ( e , 'u3' , '/foo/2' , 'read' , [ false , [ ] ] ) ;
735735} ) ;
736736
737737test ( 'TestEnforceExWithKeyMatchModel' , async ( ) => {
738738 const e = await newEnforcer ( 'examples/keymatch_model.conf' , 'examples/keymatch_policy.csv' ) ;
739- testEnforceEx ( e , 'alice' , '/alice_data/1' , 'GET' , [ true , [ 'alice' , '/alice_data/*' , 'GET' ] ] ) ;
740- testEnforceEx ( e , 'bob' , '/alice_data/1' , 'POST' , [ false , [ ] ] ) ;
739+ await testEnforceEx ( e , 'alice' , '/alice_data/1' , 'GET' , [ true , [ 'alice' , '/alice_data/*' , 'GET' ] ] ) ;
740+ await testEnforceEx ( e , 'bob' , '/alice_data/1' , 'POST' , [ false , [ ] ] ) ;
741741} ) ;
742742
743743test ( 'TestEnforceExWithPriorityModel' , async ( ) => {
744744 const e = await newEnforcer ( 'examples/priority_model.conf' , 'examples/priority_policy.csv' ) ;
745- testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
746- testEnforceEx ( e , 'bob' , 'data2' , 'read' , [ true , [ 'data2_allow_group' , 'data2' , 'read' , 'allow' ] ] ) ;
747- testEnforceEx ( e , 'alice' , 'data2' , 'read' , [ false , [ ] ] ) ;
745+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
746+ await testEnforceEx ( e , 'bob' , 'data2' , 'read' , [ true , [ 'data2_allow_group' , 'data2' , 'read' , 'allow' ] ] ) ;
747+ await testEnforceEx ( e , 'alice' , 'data2' , 'read' , [ false , [ ] ] ) ;
748748} ) ;
749749
750750test ( 'TestSubjectPriority' , async ( ) => {
751751 const e = await newEnforcer ( 'examples/subject_priority_model.conf' , 'examples/subject_priority_policy.csv' ) ;
752- testEnforceEx ( e , 'jane' , 'data1' , 'read' , [ true , [ 'jane' , 'data1' , 'read' , 'allow' ] ] ) ;
753- testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
752+ await testEnforceEx ( e , 'jane' , 'data1' , 'read' , [ true , [ 'jane' , 'data1' , 'read' , 'allow' ] ] ) ;
753+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
754+ } ) ;
755+
756+ test ( 'TestSubjectPriority with CSV converted to addPolicy/addGroupingPolicy' , async ( ) => {
757+ const e = await newEnforcer ( 'examples/subject_priority_model.conf' ) ;
758+
759+ await e . addPolicy ( 'root' , 'data1' , 'read' , 'deny' ) ;
760+ await e . addPolicy ( 'admin' , 'data1' , 'read' , 'deny' ) ;
761+ await e . addPolicy ( 'editor' , 'data1' , 'read' , 'deny' ) ;
762+ await e . addPolicy ( 'subscriber' , 'data1' , 'read' , 'deny' ) ;
763+ await e . addPolicy ( 'jane' , 'data1' , 'read' , 'allow' ) ;
764+ await e . addPolicy ( 'alice' , 'data1' , 'read' , 'allow' ) ;
765+
766+ await e . addGroupingPolicy ( 'admin' , 'root' ) ;
767+ await e . addGroupingPolicy ( 'editor' , 'admin' ) ;
768+ await e . addGroupingPolicy ( 'subscriber' , 'admin' ) ;
769+ await e . addGroupingPolicy ( 'jane' , 'editor' ) ;
770+ await e . addGroupingPolicy ( 'alice' , 'subscriber' ) ;
771+
772+ await testEnforceEx ( e , 'jane' , 'data1' , 'read' , [ true , [ 'jane' , 'data1' , 'read' , 'allow' ] ] ) ;
773+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
774+ } ) ;
775+
776+ test ( 'TestSubjectPriority simpler with CSV' , async ( ) => {
777+ const e = await newEnforcer ( 'examples/subject_priority_model.conf' , 'examples/subject_priority_policy_simple.csv' ) ;
778+
779+ await testEnforceEx ( e , 'user' , 'data1' , 'read' , [ true , [ 'user' , 'data1' , 'read' , 'allow' ] ] ) ;
780+ } ) ;
781+
782+ test ( 'TestSubjectPriority simpler with addPolicy' , async ( ) => {
783+ const e = await newEnforcer ( 'examples/subject_priority_model.conf' ) ;
784+
785+ await e . addPolicy ( 'group' , 'data1' , 'read' , 'deny' ) ;
786+ await e . addPolicy ( 'user' , 'data1' , 'read' , 'allow' ) ;
787+ await e . addGroupingPolicy ( 'user' , 'group' ) ;
788+
789+ await testEnforceEx ( e , 'user' , 'data1' , 'read' , [ true , [ 'user' , 'data1' , 'read' , 'allow' ] ] ) ;
790+ } ) ;
791+
792+ test ( 'TestSubjectPriority is kept after removing a grouping policy' , async ( ) => {
793+ const e = await newEnforcer ( 'examples/subject_priority_model.conf' , 'examples/subject_priority_policy.csv' ) ;
794+
795+ // jane loses her role, so only the "jane" rule itself is left to match her.
796+ await e . removeGroupingPolicy ( 'jane' , 'editor' ) ;
797+ await testEnforceEx ( e , 'jane' , 'data1' , 'read' , [ true , [ 'jane' , 'data1' , 'read' , 'allow' ] ] ) ;
798+ await testEnforceEx ( e , 'alice' , 'data1' , 'read' , [ true , [ 'alice' , 'data1' , 'read' , 'allow' ] ] ) ;
754799} ) ;
755800
756801test ( 'TestSubjectPriorityWithDomain' , async ( ) => {
757802 const e = await newEnforcer ( 'examples/subject_priority_model_with_domain.conf' , 'examples/subject_priority_policy_with_domain.csv' ) ;
758- testEnforceEx ( e , 'alice' , 'data1' , 'write' , [ true , [ 'alice' , 'data1' , 'domain1' , 'write' , 'allow' ] ] , 'domain1' ) ;
759- testEnforceEx ( e , 'bob' , 'data2' , 'write' , [ true , [ 'bob' , 'data2' , 'domain2' , 'write' , 'allow' ] ] , 'domain2' ) ;
803+ await testEnforceEx ( e , 'alice' , 'data1' , 'write' , [ true , [ 'alice' , 'data1' , 'domain1' , 'write' , 'allow' ] ] , 'domain1' ) ;
804+ await testEnforceEx ( e , 'bob' , 'data2' , 'write' , [ true , [ 'bob' , 'data2' , 'domain2' , 'write' , 'allow' ] ] , 'domain2' ) ;
760805} ) ;
761806
762807test ( 'TestEnforcerWithScopeFileSystem' , async ( ) => {
0 commit comments