Пример #1
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);
        }
Пример #2
0
        // GET: Leitor

        private void CarregarDropDownListLivros()
        {
            RepositoryFacade repositoryFacede = new RepositoryFacade();
            List <Livro>     livros           = repositoryFacede.Livro.GetAll();

            ViewBag.Livro_Id = new SelectList(livros, "Id", "Nome");
        }
Пример #3
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);
        }
Пример #4
0
        public virtual void TestInitialize()
        {
            DbContextHelper <CadastroEntities> .CreateContext();

            BusinessFacade   = new BusinessFacade();   //Aqui não pode ser singleton
            RepositoryFacade = new RepositoryFacade(); //Aqui não pode ser singleton
        }
Пример #5
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);
            }
        }
Пример #6
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));
        }
Пример #7
0
        public virtual void TestInitialize()
        {
            DbContextHelper <LanchoneteEntities> .CreateContext();

            FabricaDeDados.IncluirTodosIngredientesDisponiveis();

            BusinessFacade   = new BusinessFacade();   //Aqui não pode ser singleton
            RepositoryFacade = new RepositoryFacade(); //Aqui não pode ser singleton
        }
Пример #8
0
        public void RBAC_GetPermissionEntry_Success()
        {
            var repo = RepositoryFacade.ResolveInstance <GroupRepository>();

            using (RepositoryFacade.TransactionScope(repo))
            {
                var controller = new PermissionFacadeController();
                Assert.IsNotNull(controller.GetPermissionEntry(1));
            }
        }
Пример #9
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);
            }
        }
Пример #10
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);
            }
        }
Пример #11
0
        public void NewsMessageControllerPost()
        {
            IRepository <NewsMessage> nm = new RepositoryFacade().GetNewsMessageRepository();
            NewsMessage n = new NewsMessage
            {
            };
            var test = nm.Create(n);

            //Assert
            Assert.IsNotNull(test);
            Assert.AreNotEqual(n, test);
        }
Пример #12
0
        /// <summary>
        /// 获取指定类型的仓储
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private IRepository FindRepository(Type type)
        {
            if (_repositoriesCache.ContainsKey(type.FullName))
            {
                return(_repositoriesCache[type.FullName]);
            }

            var repository = RepositoryFacade.Find(type);

            _repositoriesCache[type.FullName] = repository;

            return(repository);
        }
Пример #13
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);
                }
            }
        }
Пример #14
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);
        }
Пример #16
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()));
        }
Пример #17
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);
            }
        }
Пример #18
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>();
     }
 }
Пример #19
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);
            }
        }
Пример #20
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);
        }
Пример #21
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);
            }
        }
Пример #22
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);
        }
Пример #23
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);
            }
        }
Пример #24
0
        /// <summary>
        /// 查询用户的所有角色
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public RoleList FindByUser(User user)
        {
            RoleRepository roleRepository = RepositoryFacade.ResolveInstance <RoleRepository>();

            return(roleRepository.GetRoleByUserId(user.Id));
        }
Пример #25
0
 public UsersController(RepositoryFacade repositoryFacade) : base(repositoryFacade)
 {
     //
 }
Пример #26
0
        /// <summary>
        /// 执行数据归档。
        /// </summary>
        /// <param name="context">表示数据归档的上下文。</param>
        public void Archive(AggregationArchiveContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            _orignalDataDbSettingName = context.OrignalDataDbSettingName;
            _backUpDbSettingName      = context.BackUpDbSettingName;

            var updatedTimeCondition = new PropertyMatch(EntityStampExtension.UpdatedTimeProperty, PropertyOperator.LessEqual, context.DateOfArchiving);

            bool needProgress = this.ProgressChanged != null;

            if (needProgress)
            {
                this.OnProgressChanged("-------------- 开始数据归档 --------------");
            }

            using (StampContext.DisableAutoSetStamps())
            {
                foreach (var item in context.ItemsToArchive)
                {
                    var aggtRootType = item.AggregationRoot;
                    var archiveType  = item.ArchiveType;
                    if (archiveType == ArchiveType.Copy)
                    {
                        throw new NotSupportedException("Copy 操作暂不支持。");
                    }

                    var repository = RepositoryFacade.Find(aggtRootType);

                    #region 查询本次需要归档的总数据行数。

                    long totalCount = 0;
                    if (needProgress)
                    {
                        totalCount = repository.CountBy(new CommonQueryCriteria {
                            updatedTimeCondition
                        });
                        this.OnProgressChanged($"目前,共有 {totalCount} 个聚合根 {aggtRootType.FullName} 需要归档。");
                    }

                    #endregion

                    #region 构造一个查完整聚合的条件对象 CommonQueryCriteria

                    //设置 EagerLoadOptions,加载整个聚合。
                    var criteria = new CommonQueryCriteria()
                    {
                        updatedTimeCondition
                    };
                    criteria.PagingInfo = new PagingInfo(1, context.BatchSize);
                    var eagerLoadOptions = new EagerLoadOptions();
                    EagerLoadAggregationRecur(eagerLoadOptions, repository.EntityMeta);
                    if (repository.SupportTree)
                    {
                        eagerLoadOptions.LoadWithTreeChildren();
                    }
                    criteria.EagerLoad = eagerLoadOptions;

                    #endregion

                    //逐页迁移历史数据表。
                    var currentProcess = 0;
                    while (true)
                    {
                        //获取最新的一页的数据。
                        var entitiesToMigrate = repository.GetBy(criteria);
                        var count             = entitiesToMigrate.Count;
                        if (count == 0)
                        {
                            break;
                        }

                        using (var tranOriginal = RF.TransactionScope(_orignalDataDbSettingName))
                            using (var tranBackup = RF.TransactionScope(_backUpDbSettingName))
                            {
                                //迁移到历史表。
                                this.BackupToHistory(repository, entitiesToMigrate);

                                //实体删除
                                this.DeleteOriginalData(repository, entitiesToMigrate);

                                //备份完成,才能同时提交两个库的事务。
                                tranOriginal.Complete();
                                tranBackup.Complete();
                            }

                        currentProcess += count;

                        if (needProgress)
                        {
                            this.OnProgressChanged($"    处理进度", decimal.Round(currentProcess / totalCount * 100, 2));
                        }
                    }
                }
            }

            if (needProgress)
            {
                this.OnProgressChanged("-------------- 结束数据归档 --------------");
            }
        }
Пример #27
0
 public PostsController(RepositoryFacade repositoryFacade) : base(repositoryFacade)
 {
     //
 }
Пример #28
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()));
 }
Пример #29
0
 public AuthController(RepositoryFacade repositoryFacade) : base(repositoryFacade)
 {
     //
 }
Пример #30
0
        private Tuple <User, Role, Group, Resource> RBAC_InitRBAC()
        {
            var user = new User {
                UserName = "******"
            };

            RepositoryFacade.Save(user);

            var role = new Role {
                Name = "管理员", Code = "admin"
            };

            RepositoryFacade.Save(role);

            var userRole = new UserRole {
                User = user, Role = role
            };

            RepositoryFacade.Save(userRole);

            var group = new Group
            {
                Name         = "研发部",
                Code         = "abc",
                TreeChildren =
                {
                    new Group
                    {
                        Name = "测试组",
                        Code = "def"
                    }
                }
            };

            RepositoryFacade.Save(group);

            var groupUser = new GroupUser {
                Group = group, User = user
            };

            RepositoryFacade.Save(groupUser);

            var groupRole = new GroupRole {
                Group = group, Role = role
            };

            RepositoryFacade.Save(groupRole);

            var resource = new Resource
            {
                Name        = "待开明细",
                Code        = "Transcation",
                Description = "Transcation"
            }.SetIsSupportDataPermission(true).SetResourceEntityType(typeof(TestDataPermission).FullName);
            var operation = new ResourceOperation
            {
                Name = "新增",
                Code = "Add"
            };

            resource.ResourceOperationList.Add(operation);
            resource.ResourceOperationList.Add(
                new ResourceOperation
            {
                Name = "删除",
                Code = "Delete"
            }
                );
            RepositoryFacade.Save(resource);

            RepositoryFacade.Save(new RoleOperation
            {
                Role      = role,
                Operation = operation
            });

            var dataPermission = new DataPermission
            {
                Resource = resource,
                Role     = role
            };

            dataPermission.SetBuilder(new CurrentGroupPermissionConstraintBuilder
            {
                IsIncludeChildGroup = false,
                GroupIdProperty     = "GroupId"
            });
            RepositoryFacade.Save(dataPermission);

            var testDataPermission = new TestDataPermission();

            testDataPermission.Group = group;
            testDataPermission.Name  = "test";
            RepositoryFacade.Save(testDataPermission);

            return(Tuple.Create(user, role, group, resource));
        }