yyk
2024-08-22 1310b47a24f0cc70f0128c820bd490dca6a1a921
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using AutoMapper;
using Model.ModelDto.SysDto;
using Model.ModelVm.SysVm;
using SqlSugar;
using Utility;
using WMS.DAL.SystemService;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IBLL.ISysServer;
using WMS.IDAL.ISysInterface;
 
namespace WMS.BLL.SysServer
{
    /// <summary>
    /// 角色权限服务实践
    /// </summary>
    public class RoleRightServer : IRoleRightServer
    {
        /// <summary>
        /// 依赖注入
        /// </summary>
        private static readonly SqlSugarScope Db = DataContext.Db;
        private readonly UserManager _userManager;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="roles"></param>
        public RoleRightServer(UserManager userManager)
        {
            _userManager = userManager;
        }
 
        /// <summary>
        /// 获取用户的菜单权限 ----csc
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <returns></returns>
        public async Task<List<RoleRightDto>> GetRoleMenuList()
        {
            var modUser = await Db.Queryable<SysUserInfor>().FirstAsync(m => m.Id == _userManager.UserId && m.IsDel == "0");
            if (modUser == null)
            {
                throw Oops.Bah("未查询到登录人信息");
            }
            if (string.IsNullOrWhiteSpace(modUser.RoleNo))
            {
                throw Oops.Bah("未查询到登录人的所属角色信息");
            }
            return await Db.Queryable<SysRoleRight>()
                            .LeftJoin<SysFunctionMenu>((a, b) => a.MenuNo == b.MenuNo)
                            .LeftJoin<SysRoles>((a, b, c) => a.RoleNo == c.RoleNo)
                            .Where((a, b, c) => a.IsDel == "0" && b.IsDel == "0" && c.IsDel == "0")
                            .Where((a, b, c) => a.RoleNo == modUser.RoleNo)
                            .OrderBy((a, b, c) => b.Ord)            //.OrderBy((a, b, c) => SqlFunc.ToInt32(a.MenuNo))
                            .Select<RoleRightDto>()
                            .ToListAsync();
        }
 
        /// <summary>
        /// 根据id获取角色权限信息列表(单表)
        /// </summary>
        /// <param name="rolerightids">角色权限id</param>
        /// <returns></returns>
        public async Task<List<SysRoleRight>> GetRoleRightOneListById(int id)
        {
            return await Db.Queryable<SysRoleRight>().Where(s => s.IsDel == "0" && s.RoleNo == SqlFunc.Subqueryable<SysRoles>().Where(c => c.IsDel == "0" && c.Id == id).Select(c => c.RoleNo)).ToListAsync();
        }
 
        /// <summary>
        /// 新增角色权限信息
        /// </summary>
        /// <param name="MenuNo">菜单号</param>
        /// <param name="RoleNo">角色号</param>
        /// <returns></returns>
        /// <exception cref="Exception">捕获异常</exception>
        public async Task InsertRoleRight(string MenuNo, string RoleNo)
        {
            List<SysRoleRight> listRole = await Db.Queryable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ToListAsync();
            if (listRole.Count > 0)
            {
                await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == RoleNo).ExecuteCommandAsync();
            }
            var arr = MenuNo.Split(',');
            var listRight = new List<SysRoleRight>();
            //循环将菜单数组分别加入到数据模型中
            for (int j = 0; j < arr.Count(); j++)
            {
                SysRoleRight roleright = new SysRoleRight();
                roleright.RoleNo = RoleNo;//角色号
                roleright.MenuNo = arr[j];//菜单号
                roleright.CreateUser = _userManager.UserId;//创建人
                roleright.CreateTime = DateTime.Now;
                listRight.Add(roleright);
            }
            await Db.Insertable(listRight).ExecuteCommandAsync();
 
            //删除子级角色权限信息。(角色权限减少,角色下级权限同时减少)
            List<SysRoles> listRoleDel = await Db.Queryable<SysRoles>().Where(s => SqlFunc.Subqueryable<SysUserInfor>().Where(c => c.RoleNo == RoleNo && s.Id == c.Id).Any()).ToListAsync();
            var listRoleNo = listRoleDel.Select(s => s.RoleNo).Distinct().ToList();
            List<SysRoleRight> listRoleRight = await Db.Queryable<SysRoleRight>().Where(s => listRoleNo.Contains(s.RoleNo)).ToListAsync();
            foreach (var item in listRoleDel)
            {
                var listChildRoleRight = listRoleRight.Where(s => s.RoleNo == item.RoleNo).ToList();
                foreach (var right in listChildRoleRight)
                {
                    int first1 = Array.IndexOf(arr, right.MenuNo);
                    if (first1 <= -1)
                    {
                        await Db.Deleteable<SysRoleRight>().Where(s => s.RoleNo == item.RoleNo && s.MenuNo == right.MenuNo).ExecuteCommandAsync();
                    }
                }
            }
        }
 
    }
}