コード例 #1
0
        public IActionResult CapabilitiesList(int userId)
        {
            if (userId == 0)
            {
                return(R.Fail.WithError(ErrorCodes.ParentEntityMustBeNonZero).Result);
            }

            User user = null;

            if (userId < 0 || (user = _userService.Get(userId)) == null)
            {
                return(NotFound());
            }

            var roleIds               = user.Roles.Select(x => x.Id).ToArray();
            var roleCapabilities      = _capabilityService.GetByRolesConsolidated(roleIds).OrderBy(x => x.Name);
            var userCapabilities      = _capabilityService.GetByUser(userId);
            var allCapabilities       = _capabilityService.Get(out int _, x => true, x => x.Name);
            var availableCapabilities = allCapabilities.Where(x => roleCapabilities.All(y => y.Id != x.Id)).ToList();

            var activeCapabilityModels = roleCapabilities.Select(_roleModelFactory.Create);

            var availableCapabilitiesModel = availableCapabilities.Select(x =>
            {
                var model    = _roleModelFactory.Create(x);
                model.Active = userCapabilities?.Any(y => y.Id == x.Id) ?? false;
                return(model);
            }).ToList();
            var roleModels = user.Roles.Select(_roleModelFactory.Create);

            return(R.Success.With("capabilities", activeCapabilityModels)
                   .With("availableCapabilities", availableCapabilitiesModel)
                   .With("roles", roleModels).Result);
        }
コード例 #2
0
        public void Role_capability_tests_Succeeds()
        {
            var role1 = new Role()
            {
                Name         = "Test Role",
                SystemName   = "TestRole",
                IsActive     = true,
                IsSystemRole = false
            };

            _roleService.Insert(role1);

            var role2 = new Role()
            {
                Name         = "Test Role 2",
                SystemName   = "TestRole",
                IsActive     = true,
                IsSystemRole = false
            };

            _roleService.Insert(role2);

            var accessAdminCap =
                _capabilityService.FirstOrDefault(x => x.Name == CapabilitySystemNames.AccessAdministration);
            var createOrderCap =
                _capabilityService.FirstOrDefault(x => x.Name == CapabilitySystemNames.CreateOrder);
            var editProductCap =
                _capabilityService.FirstOrDefault(x => x.Name == CapabilitySystemNames.EditProduct);

            var user = new User()
            {
                Name          = "Test User",
                CreatedOn     = DateTime.UtcNow,
                UpdatedOn     = DateTime.UtcNow,
                LastLoginDate = null,
                Active        = true
            };

            _userService.Insert(user);


            _capabilityService.SetRoleCapabilities(role1.Id, new [] { accessAdminCap.Id });
            _capabilityService.SetRoleCapabilities(role2.Id, new [] { editProductCap.Id });
            _capabilityService.SetUserCapabilities(user.Id, new[] { createOrderCap.Id });

            _roleService.SetUserRoles(user.Id, new [] { role1.Id, role2.Id });
            //refetch to load all data
            user = _userService.Get(user.Id);

            var consoliatedCapabilities = _capabilityService.GetByRolesConsolidated(new[] { role1.Id, role2.Id });

            Assert.AreEqual(2, consoliatedCapabilities.Count());

            Assert.IsTrue(user.Can(CapabilitySystemNames.AccessAdministration));
            Assert.IsTrue(user.Can(CapabilitySystemNames.EditProduct));
            Assert.IsTrue(user.Can(CapabilitySystemNames.CreateOrder));
            Assert.IsFalse(user.Can(CapabilitySystemNames.DeleteUser));
        }
コード例 #3
0
 public IList <Capability> GetConsolidatedCapabilities(int[] roleIds)
 {
     return(_capabilityService.GetByRolesConsolidated(roleIds));
 }