ningshuxia
2024-05-27 f51ccee7e76f598c1f718190d216f96b5ea1ca46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
namespace Yw.Application
{
    /// <summary>
    /// RoleProjectMenuMapping
    /// </summary>
    [Route("Auth/Role/Project/Menu/Mapping")]
    [ApiDescriptionSettings("Auth", Name = "角色与项目菜单映射", Order = 5900)]
    public class RoleProjectMenu_Controller : IDynamicApiController
    {
        private Service.RoleProjectMenuMapping _service = new();
 
        /// <summary>
        ///  获取产品下发菜单列表
        /// </summary>
        [Route("GetAuthorizeMenuList@V1.0")]
        [HttpGet]
        public List<RoleProjectMenuHaveDto> GetAuthorizeMenuList([FromQuery][Required] QueryProjectAuthorizeMenuListInput input)
        {
            var project = new Service.Project().GetByID(input.ProjectID);
            if (project == null)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ProjectID:{input.ProjectID} 数据不存在");
            }
 
            var role = new Service.Role().GetByID(input.RoleID);
            if (role == null)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"RoleID:{input.RoleID} 数据不存在");
            }
 
            var bol = new Service.ProjectRoleMapping().IsExistByProjectIDAndRoleID(input.ProjectID, input.RoleID);
            if (!bol)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.L001, $"ProjectID:{input.ProjectID}, RoleID:{input.RoleID},项目角色不匹配");
            }
 
            var dict = _service.GetAuthorizeMenuList(input.ProjectID, input.RoleID);
            if (dict == null || dict.Count < 1)
            {
                return default;
            }
 
            var vmList = new List<RoleProjectMenuHaveDto>();
            foreach (var item in dict)
            {
                var vm = new RoleProjectMenuHaveDto(item.Key, item.Value);
                var vmParent = vmList.Find(x => x.ID == vm.ParentID);
                if (vmParent != null)
                {
                    if (vm.Have)
                    {
                        vmParent.Have = true;
                    }
                }
                vmList.Add(vm);
            }
            return vmList;
        }
 
        /// <summary>
        /// 设置
        /// </summary>
        [Route("Set@V1.0")]
        [HttpPost]
        public bool Set([Required] SetRoleProjectMenuInput input)
        {
            var project = new Service.Project().GetByID(input.ProjectID);
            if (project == null)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"ProjectID:{input.ProjectID} 数据不存在");
            }
 
            var role = new Service.Role().GetByID(input.RoleID);
            if (role == null)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.D001, $"RoleID:{input.RoleID} 数据不存在");
            }
 
            var exist = new Service.ProjectRoleMapping().IsExistByProjectIDAndRoleID(input.ProjectID, input.RoleID);
            if (!exist)
            {
                throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.L001, $"ProjectID:{input.ProjectID}, RoleID:{input.RoleID},项目角色不匹配");
            }
 
            if (input.MenuIds != null && input.MenuIds.Count > 0)
            {
                var menuList = new Service.ProjectMenu().GetByIds(input.MenuIds);
                if (menuList == null || menuList.Count < 1)
                {
                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, "菜单id列表与数据库不匹配");
                }
                var projectIds = menuList.Select(x => x.ProjectID).Distinct().ToList();
                if (projectIds.Count != 1 || projectIds[0] != project.ID)
                {
                    throw YOops.Oh(eResultCode.Alert, InternalErrorCodes.V001, "菜单id列表与数据库不匹配");
                }
            }
 
            var bol = _service.Set(input.RoleID, input.ProjectID, input.MenuIds);
            return bol;
        }
 
 
 
 
    }
}