コード例 #1
0
        /// <summary>
        /// 根据当前用户获取权限
        /// </summary>
        /// <param name="userId">当前用户ID</param>
        /// <param name="appId">AppID</param>
        /// <param name="roleId">角色ID</param>
        /// <returns></returns>
        public RolePermissionsResponseModel GetMenuResponses(int userId, int appId, int roleId)
        {
            var ulistAll      = GetMenuAndFunctionByUserId(userId, appId);
            var rlistAll      = GetMenuAndFunctionByRoleId(roleId, appId);
            var responseModel = new RolePermissionsResponseModel
            {
                AllPermissions     = ulistAll,
                CurrentPermissions = rlistAll,
                RoleId             = roleId
            };

            return(responseModel);
        }
コード例 #2
0
        private static ICollection <RolePermissionTreeNode> GetTreeNodes(RolePermissionsResponseModel model)
        {
            ICollection <RolePermissionTreeNode> allTreeNodes = new List <RolePermissionTreeNode>();

            if (model.AllPermissions != null)
            {
                Map(model.AllPermissions, allTreeNodes);
            }

            ICollection <RolePermissionTreeNode> roleTreeNodes = new List <RolePermissionTreeNode>();

            if (model.CurrentPermissions != null)
            {
                Map(model.CurrentPermissions, roleTreeNodes);
            }

            var intersectNodes = allTreeNodes.Intersect(roleTreeNodes, new RolePermissionTreeNodeEqualityComparer()).ToList();

            Parallel.ForEach(intersectNodes, node =>
            {
                node.Checked  = true;
                node.Open     = true;
                node.Disabled = false;
            });

            var allExceptRoleNodes = allTreeNodes.Except(roleTreeNodes, new RolePermissionTreeNodeEqualityComparer()).ToList();

            Parallel.ForEach(allExceptRoleNodes, node =>
            {
                node.Checked  = false;
                node.Open     = false;
                node.Disabled = false;
            });

            var roleExceptAllNodes = roleTreeNodes.Except(allTreeNodes, new RolePermissionTreeNodeEqualityComparer()).ToList();

            Parallel.ForEach(roleExceptAllNodes, node =>
            {
                node.Checked  = true;
                node.Open     = true;
                node.Disabled = true;
            });

            var treeNodes = intersectNodes.Concat(allExceptRoleNodes).Concat(roleExceptAllNodes).ToList();

            return(treeNodes);
        }