Пример #1
0
        /// <summary>
        /// 获取当前组的所有菜单资源的权限
        /// </summary>
        /// <param name="groupID">用户组的主键</param>
        /// <returns>返回获取到的资源数组列表</returns>
        protected override IList <Resource> GenerateResourcePermission(int groupID)
        {
            ResourceList     resourceList = RepositoryFacade.ResolveInstance <ResourceRepository>().Extension <ResourceRepositoryExtension>().GetResourceByGroupID(groupID);
            IList <Resource> resource     = resourceList.Concrete().ToList();

            return(resource);
        }
Пример #2
0
        public void RBAC_UserRole_GetRoleListTest()
        {
            this._controller = DomainControllerFactory.Create <UserRoleController>();

            var userRoleRepository = RepositoryFacade.ResolveInstance <UserRoleRepository>();
            var userRepository     = RepositoryFacade.ResolveInstance <UserRepository>();
            var roleRepository     = RepositoryFacade.ResolveInstance <RoleRepository>();

            using (RepositoryFacade.TransactionScope(userRoleRepository))
            {
                var user = new User {
                    Id = 1, UserName = "******", RealName = "Test_001", Email = "*****@*****.**", PhoneNumber = "18666666666"
                };
                var role = new Role {
                    Id = 1, Code = Guid.NewGuid().ToString("N"), Description = "", Name = "管理员"
                };

                userRepository.Save(user);
                roleRepository.Save(role);
                userRoleRepository.Save(new UserRole {
                    User = user, Role = role
                });

                var roleList = roleRepository.GetRoleByUserId(user.Id);

                Assert.IsNotNull(roleList);
                Assert.IsTrue(roleList.Count == 1);
            }
        }
Пример #3
0
        /// <summary>
        /// 设置组织的用户列表
        /// 用户列表必须是当前组织的所有用户集合
        /// </summary>
        /// <param name="userIds">用户Id集合</param>
        /// <param name="groupId">组织Id</param>
        public void SetGroupUser(IList <long> userIds, long groupId)
        {
            var groupUserRepository = RepositoryFacade.ResolveInstance <GroupUserRepository>();
            var groupUserList       = groupUserRepository.GetByParentId(groupId).Concrete();
            var changeGroupUserList = groupUserRepository.NewList();
            var groupUsers          = groupUserList as IList <GroupUser> ?? groupUserList.ToList();

            foreach (GroupUser item in groupUsers)
            {
                if (userIds.All(id => id != item.UserId))
                {
                    changeGroupUserList.Add(item);
                    item.PersistenceStatus = PersistenceStatus.Deleted;
                }
            }
            var group = new Group {
                Id = groupId
            };

            foreach (var userId in userIds)
            {
                if (groupUsers.All(g => g.UserId != userId))
                {
                    GroupUser groupUser = new GroupUser();
                    groupUser.Group = group;
                    groupUser.User  = new Accounts.User {
                        Id = userId
                    };
                    groupUser.PersistenceStatus = PersistenceStatus.New;
                    changeGroupUserList.Add(groupUser);
                }
            }
            groupUserRepository.Save(changeGroupUserList);
        }
Пример #4
0
        /// <summary>
        /// 根据用户所在的组集合,获取组的角色列表
        /// </summary>
        /// <param name="user">用户</param>
        /// <returns></returns>
        public RoleList FindByUser(User user)
        {
            var groupList = RepositoryFacade.ResolveInstance <GroupRepository>().GetGroupByUserId(user.Id);
            var idList    = groupList.Select(p => (long)p.Id);

            return
                (RepositoryFacade.ResolveInstance <RoleRepository>()
                 .GetRoleByGroupIdList(idList));
        }
Пример #5
0
        public void RBAC_GetPermissionEntry_Success()
        {
            var repo = RepositoryFacade.ResolveInstance <GroupRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var controller = new PermissionFacadeController();
                Assert.IsNotNull(controller.GetPermissionEntry(1));
            }
        }
Пример #6
0
        public void RBAC_Role_GetResourceOperation()
        {
            var repo = RepositoryFacade.ResolveInstance <ResourceOperationRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var tuple = RBAC_InitRBAC();
                Assert.IsTrue(repo.GetByParentId(tuple.Item4.Id).Count == 2);
                Assert.IsTrue(repo.GetResourceOperation(tuple.Item1.Id, tuple.Item4.Id).Count == 1);
            }
        }
Пример #7
0
        public void RBAC_Group_GetAllGroupList()
        {
            var repo = RepositoryFacade.ResolveInstance <GroupRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                RBAC_InitRBAC();
                var groupList = TreeHelper.ConvertToList <Group>(repo.GetAll());
                Assert.IsTrue(groupList.Count == 2);
            }
        }
Пример #8
0
        public void RBAC_DataPermission_CurrentGroupDataPermisssion()
        {
            var repo = RepositoryFacade.ResolveInstance <TestDataPermissionRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var tuple = RBAC_InitRBAC();
                using (DataPermissionFacade.EnableDataPermission(tuple.Item4))
                {
                    AccountContext.CurrentUser = tuple.Item1;
                    Assert.IsTrue(repo.GetAll().Count == 1);
                }
            }
        }
Пример #9
0
        public void RBAC_Role_GetOperationByRole()
        {
            var repo = RepositoryFacade.ResolveInstance <RoleRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var tuple = RBAC_InitRBAC();
                Assert.IsTrue(
                    RepositoryFacade.ResolveInstance <ResourceOperationRepository>()
                    .GetOperationByRoleList(new List <long> {
                    tuple.Item2.Id
                })
                    .Count == 1);
            }
        }
        /// <summary>
        /// 获取用户的组织列表或者及其下级组织列表
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <param name="isIncludeChildGroup">是否包含下级</param>
        /// <returns></returns>
        protected virtual List <long> GetGroupListByUserId(long userId, bool isIncludeChildGroup)
        {
            List <long> groupIdList     = new List <long>();
            var         groupRepository = RepositoryFacade.ResolveInstance <GroupRepository>();
            var         groupList       = groupRepository.GetGroupByUserId(userId);

            if (isIncludeChildGroup)
            {
                groupIdList.AddRange(groupRepository.GetGroupAndLowerByGroupList(groupList));
            }
            else
            {
                groupIdList.AddRange(groupList.Select(p => p.Id).Cast <long>());
            }
            return(groupIdList);
        }
Пример #11
0
        /// <summary>
        /// 获取用户的资源列表
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <returns></returns>
        public virtual ResourceList GetResourceListByUserId(long userId)
        {
            RoleRepository roleRepository = RepositoryFacade.ResolveInstance <RoleRepository>();
            var            roleList       = roleRepository.GetRoleByUserId(userId);
            var            roleIdList     = roleList.Select(r => r.Id).Cast <long>().ToList();
            List <object>  resourceIdList = new List <object>();
            var            resourceOperationRepository = RepositoryFacade.ResolveInstance <ResourceOperationRepository>();
            var            resourceOperationList       = resourceOperationRepository.GetOperationByRoleList(roleIdList);

            foreach (var item in resourceOperationList)
            {
                if (!resourceIdList.Contains(item.ResourceId))
                {
                    resourceIdList.Add(item.ResourceId);
                }
            }
            return(RepositoryFacade.ResolveInstance <ResourceRepository>().GetByIdList(resourceIdList.ToArray()));
        }
Пример #12
0
 /// <summary>
 /// 重载构造函数,初始化权限使用对象
 /// </summary>
 /// <param name="permissionEntry">权限使用对象</param>
 protected PermissionBuilder(PermissionEntry permissionEntry)
 {
     if (permissionEntry == null)
     {
         _permissionEntry = new DefaultPermissionEntry();
     }
     else
     {
         _permissionEntry = permissionEntry;
     }
     if (_groupRepository == null)
     {
         _groupRepository = RepositoryFacade.ResolveInstance <GroupRepository>();
     }
     if (_userRepository == null)
     {
         _userRepository = RepositoryFacade.ResolveInstance <UserRepository>();
     }
 }
Пример #13
0
        public void RBAC_Role_SetRoleOperation()
        {
            var controller = DomainControllerFactory.Create <RoleController>();
            var repo       = RepositoryFacade.ResolveInstance <RoleOperationRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var tuple    = RBAC_InitRBAC();
                var originId = repo.GetAll()[0].OperationId;
                var role     = tuple.Item2;
                var resource = tuple.Item4;
                var delopId  = Convert.ToInt64(resource.ResourceOperationList[1].Id);
                controller.SetRoleOperation(role.Id, new List <long> {
                    delopId
                });
                var savedId = repo.GetAll()[0].OperationId;
                Assert.AreNotEqual(originId, savedId);
            }
        }
Пример #14
0
        public void RBAC_DataPermissionCu_rrentGroupAndLowerDataPermisssion()
        {
            var repo = RepositoryFacade.ResolveInstance <TestDataPermissionRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var tuple = RBAC_InitRBAC();

                var role = new Role {
                    Name = "包含下级管理员", Code = "admin"
                };
                RepositoryFacade.Save(role);
                var userRole = new UserRole {
                    User = tuple.Item1, Role = role
                };
                RepositoryFacade.Save(userRole);

                var dataPermission1 = new DataPermission
                {
                    Resource = tuple.Item4,
                    Role     = role
                };
                dataPermission1.SetBuilder(new CurrentGroupPermissionConstraintBuilder
                {
                    IsIncludeChildGroup = true,
                    GroupIdProperty     = "GroupId"
                });
                RepositoryFacade.Save(dataPermission1);

                var testDataPermission = new TestDataPermission();
                testDataPermission.Group = tuple.Item3.TreeChildren[0] as Group;
                testDataPermission.Name  = "test";
                RepositoryFacade.Save(testDataPermission);

                using (DataPermissionFacade.EnableDataPermission(tuple.Item4))
                {
                    AccountContext.CurrentUser = tuple.Item1;
                    Assert.IsTrue(repo.GetAll().Count == 2);
                }
                Assert.IsTrue(repo.GetAll().Count == 2);
            }
        }
Пример #15
0
        /// <summary>
        /// 获取指定用户、资源的操作列表
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <param name="resourceId">资源Id</param>
        /// <returns></returns>
        public virtual ResourceOperationList GetResourceOperation(long userId, long resourceId)
        {
            RoleRepository roleRepository              = RepositoryFacade.ResolveInstance <RoleRepository>();
            var            roleList                    = roleRepository.GetRoleByUserId(userId);
            var            roleIdList                  = roleList.Select(r => r.Id).Cast <long>().ToList();
            var            operationIdList             = RepositoryFacade.ResolveInstance <ResourceOperationRepository>().GetOperationByRoleList(roleIdList).Select(o => (long)o.Id);
            var            resourceOperationRepository = RepositoryFacade.ResolveInstance <ResourceOperationRepository>();
            var            resourceOperationList       = resourceOperationRepository.GetByParentId(resourceId);
            var            newOperationList            = resourceOperationRepository.NewList();
            var            idList = operationIdList as long[] ?? operationIdList.ToArray();

            foreach (var item in resourceOperationList)
            {
                if (idList.Any(id => id == item.Id))
                {
                    newOperationList.Add(item);
                }
            }
            return(newOperationList);
        }
Пример #16
0
        /// <summary>
        /// 保存角色分配功能操作
        /// 功能操作列表必须是当前角色所有的功能操作集合
        /// </summary>
        /// <param name="roleId">角色Id</param>
        /// <param name="operationIdList">操作Id集合</param>
        public virtual void SetRoleOperation(long roleId, List <long> operationIdList)
        {
            RoleOperationRepository roleOperationRepository = RepositoryFacade.ResolveInstance <RoleOperationRepository>();
            var roleOperationList = roleOperationRepository.GetByRoleIdList(new List <long> {
                roleId
            }).Concrete().ToList();
            var changeRoleOpertaionList = roleOperationRepository.NewList();

            //处理删除的操作
            foreach (var item in roleOperationList)
            {
                if (operationIdList.All(id => id != item.OperationId))
                {
                    changeRoleOpertaionList.Add(item);
                    item.PersistenceStatus = PersistenceStatus.Deleted;
                }
            }
            var addRole = new Role {
                Id = roleId
            };

            //处理新增操作
            foreach (var item in operationIdList)
            {
                if (roleOperationList.All(o => o.OperationId != item))
                {
                    RoleOperation roleOpertaion = new RoleOperation();
                    roleOpertaion.Role      = addRole;
                    roleOpertaion.Operation = new ResourceOperation()
                    {
                        Id = item
                    };
                    roleOpertaion.PersistenceStatus = PersistenceStatus.New;
                    changeRoleOpertaionList.Add(roleOpertaion);
                }
            }
            if (changeRoleOpertaionList.Count > 0)
            {
                roleOperationRepository.Save(changeRoleOpertaionList);
            }
        }
Пример #17
0
        /// <summary>
        /// 获取当前组的所有菜单资源所对应的操作权限
        /// </summary>
        /// <param name="groupID">用户组的主键</param>
        /// <returns>返回获取到的当前组每个资源所对应的操作权限的字典集合</returns>
        protected override IDictionary <long, IList <ResourceOperation> > GenerateOperationPermission(int groupID)
        {
            IDictionary <long, IList <ResourceOperation> > operations = new Dictionary <long, IList <ResourceOperation> >();
            var resourceOperationList = RepositoryFacade.ResolveInstance <ResourceOperationRepository>().Extension <ResourceOperationRepositoryExtension>().GetResourceOperationByGroupID(groupID);

            foreach (ResourceOperation item in resourceOperationList)
            {
                IList <ResourceOperation> list = null;
                if (operations.TryGetValue(item.ResourceId, out list))
                {
                    list.Add(item);
                }
                else
                {
                    list = new List <ResourceOperation>();
                    list.Add(item);
                    operations.Add(item.ResourceId, list);
                }
            }
            return(operations);
        }
Пример #18
0
        public void RBAC_UserRole_HasRoleTest()
        {
            this._controller = DomainControllerFactory.Create <UserRoleController>();

            var userRoleRepository = RepositoryFacade.ResolveInstance <UserRoleRepository>();
            var userRepository     = RepositoryFacade.ResolveInstance <UserRepository>();
            var roleRepository     = RepositoryFacade.ResolveInstance <RoleRepository>();

            using (RepositoryFacade.TransactionScope(userRepository))
            {
                var user = new User {
                    Id = 1, UserName = "******", RealName = "Test_001", Email = "*****@*****.**", PhoneNumber = "18666666666"
                };
                var role = new Role {
                    Id = 1, Code = Guid.NewGuid().ToString("N"), Description = "", Name = "管理员"
                };

                userRepository.Save(user);
                roleRepository.Save(role);
                userRoleRepository.Save(new UserRole {
                    User = user, Role = role
                });

                var result1 = this._controller.HasRole(new User {
                    Id = user.Id
                }, new Role {
                    Id = role.Id
                });
                var result2 = this._controller.HasRole(new User {
                    Id = user.Id
                }, new Role {
                    Id = role.Id + 1L
                });

                Assert.IsTrue(result1);
                Assert.IsFalse(result2);
            }
        }
Пример #19
0
        /// <summary>
        /// 查询用户的所有角色
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public RoleList FindByUser(User user)
        {
            RoleRepository roleRepository = RepositoryFacade.ResolveInstance <RoleRepository>();

            return(roleRepository.GetRoleByUserId(user.Id));
        }
Пример #20
0
 /// <summary>
 /// 获取某个资源角色的数据权限列表
 /// </summary>
 /// <param name="resourceId"></param>
 /// <param name="roles"></param>
 /// <returns></returns>
 private static DataPermissionList CollectDataPermissions(long resourceId, RoleList roles)
 {
     return(RepositoryFacade.ResolveInstance <DataPermissionRepository>()
            .GetDataPermissionList(resourceId, roles.Select(p => p.Id).Cast <long>().ToList()));
 }