public void CheckRulesAsOne_AllRules_Should_Satisfied()
        {
            //result = rule1 && rule2
            //result = allowedUsers || allowedRoles
            var logic    = new RoleBasedCheckLogic();
            var theRule  = RoleBasedPermissionRule.Create("MockPermission", "bob, john", "");
            var theRule2 = RoleBasedPermissionRule.Create("MockPermission", "", "Admin, super");
            var theRules = new List <RoleBasedPermissionRule>()
            {
                theRule, theRule2
            };

            var bobContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "bob");

            logic.CheckRulesAsOne(theRules, bobContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);

            var johnContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "john", "Admin");

            logic.CheckRulesAsOne(theRules, johnContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var marryContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "marry", "Admin", "Super");

            logic.CheckRulesAsOne(theRules, marryContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);

            var jackContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "jack", "FooRole");

            logic.CheckRulesAsOne(theRules, jackContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);

            var tomContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "tom", "Leader");

            logic.CheckRulesAsOne(theRules, tomContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);
        }
        public void CheckRule_MatchPermissionId_Should_Ok()
        {
            var logic        = new RoleBasedCheckLogic();
            var checkContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "");
            var guestRule    = RoleBasedPermissionRule.CreateGuestRule("MockPermission");

            var result = logic.Check(guestRule, checkContext);

            result.LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);
        }
        public void CheckLoginRule_Should_Ok()
        {
            var logic     = new RoleBasedCheckLogic();
            var loginRule = RoleBasedPermissionRule.CreateLoginRule("MockPermission");

            var guestContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "");

            logic.Check(loginRule, guestContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);

            var loginContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "bob");

            logic.Check(loginRule, loginContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);
        }
        public void CheckUserRule_Should_Ok()
        {
            var logic   = new RoleBasedCheckLogic();
            var theRule = RoleBasedPermissionRule.Create("MockPermission", "bob, john", "");

            var bobContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "bob");

            logic.Check(theRule, bobContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var johnContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "john");

            logic.Check(theRule, johnContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var jackContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "jack");

            logic.Check(theRule, jackContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);
        }
        public static RoleBasedPermissionRule GetRule(this IDictionary <string, RoleBasedPermissionRule> rules, string permissionId, bool autoCreate)
        {
            var exist = rules.TryGetValue(permissionId, out var theRule);

            if (!exist)
            {
                if (!autoCreate)
                {
                    return(null);
                }
                theRule = new RoleBasedPermissionRule
                {
                    PermissionId = permissionId
                };
                rules[permissionId] = theRule;
            }

            return(theRule);
        }
        public void CheckUserRoleRule_Should_Ok()
        {
            //result = allowedUsers || allowedRoles
            var logic   = new RoleBasedCheckLogic();
            var theRule = RoleBasedPermissionRule.Create("MockPermission", "bob, john", "Admin, super");

            var bobContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "bob");

            logic.Check(theRule, bobContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var johnContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "john", "FooRole");

            logic.Check(theRule, johnContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var marryContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "marry", "Admin", "Super");

            logic.Check(theRule, marryContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Allowed);

            var jackContext = MockHelper.CreatePermissionCheckContext("A, B, MockPermission", "jack", "FooRole");

            logic.Check(theRule, jackContext).LogJson().Category.ShouldEqual(PermissionCheckResultCategory.Forbidden);
        }
 public static IDictionary <string, RoleBasedPermissionRule> AddOrUpdate(this IDictionary <string, RoleBasedPermissionRule> rules, RoleBasedPermissionRule theRule)
 {
     rules.AddOrUpdate(theRule.PermissionId, theRule.AllowedUsers, theRule.AllowedRoles);
     return(rules);
 }