Browse Source

添加权限验证逻辑并优化代码格式

在 `appsettings.json` 文件中,添加了一个新的配置项 `FeeBasePerm`,包含了一些特定人员的 ID 和姓名。
在 `EnterExitCostDraftView.cs` 和 `EnterExitCostView.cs` 文件中,新增了 `IsAssignPerm` 属性,并为相关属性设置了默认值 `false`。
在 `EnterExitCostDraftRepository.cs` 文件中,修改了查询逻辑,添加了市场部人员,并去掉了特定的人员,同时从配置中添加了特定人员。调整了代码格式,统一了提示信息,新增了权限验证逻辑。
在 `EnterExitCostRepository.cs` 文件中,添加了 `EyeSoft.Runtime.InteropServices` 的引用,优化了代码格式,移除了不必要的注释代码,添加了对分配权限的验证逻辑。
LEIYI 2 months ago
parent
commit
b20d80c966

+ 21 - 1
OASystem/OASystem.Api/appsettings.json

@@ -379,5 +379,25 @@
   ],
 
   //日付类型Data
-  "Dailypayment": "666,667"
+  "Dailypayment": "666,667",
+
+  //出入境费用明细权限特定基础人员
+  "FeeBasePerm": [
+    {
+      "Id": 149,
+      "Name": "王鸽"
+    },
+    {
+      "Id": 330,
+      "Name": "刘琪"
+    },
+    {
+      "Id": 334,
+      "Name": "朱琳"
+    },
+    {
+      "Id": 95,
+      "Name": "舒庆"
+    }
+  ]
 }

+ 2 - 1
OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostDraftView.cs

@@ -24,8 +24,9 @@ namespace OASystem.Domain.ViewModels.Groups
     /// </summary>
     public class EnterExitCostDraftInfoView
     {
-        public bool IsSave { get; set; }
+        public bool IsSave { get; set; } = false;
         public bool IsView { get; set; } = false;
+        public bool IsAssignPerm { get; set; } = false;
 
         public int[] ViewUsers { get; set; } = Array.Empty<int>();
 

+ 14 - 1
OASystem/OASystem.Domain/ViewModels/Groups/EnterExitCostView.cs

@@ -259,9 +259,22 @@ namespace OASystem.Domain.ViewModels.Groups
     /// </summary>
     public class EnterExitCostInfoView
     {
-        public bool IsSave { get; set; }
+        /// <summary>
+        /// 是否有保存权限
+        /// </summary>
+        public bool IsSave { get; set; } = false;
+        /// <summary>
+        /// 是否有查看权限
+        /// </summary>
         public bool IsView { get; set; } = false;
+        /// <summary>
+        /// 是否有分配权限
+        /// </summary>
+        public bool IsAssignPerm { get; set; } = false;
 
+        /// <summary>
+        /// 权限人员信息
+        /// </summary>
         public int[] ViewUsers { get; set; } = Array.Empty<int>();
 
         /// <summary>

+ 68 - 64
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostDraftRepository.cs

@@ -35,12 +35,28 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <returns></returns>
         public async Task<List<PermissionViewUserview>> PermissionViewUsersAsync()
         {
-            var gj_jobPostIds = new List<int>() { 22, 32 };
+           // 添加市场部人员
             var viewPermissionData = await _sqlSugar.Queryable<Sys_Users>()
-                .Where(x => x.IsDel == 0 && ((x.DepId == 7 && gj_jobPostIds.Contains(x.JobPostId)) || x.DepId == 6))
-                .Select(x => new PermissionViewUserview { Id = x.Id, Name = x.CnName })
+                .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)
+                .Where((u, d) => u.IsDel == 0 && u.HrAudit == 1 && d.DepName.Equals("市场部"))
+                .Select((u, d) => new PermissionViewUserview { Id = u.Id, Name = u.CnName })
                 .ToListAsync();
 
+            //去掉特殊人员
+            if (viewPermissionData.Any())
+            {
+                var notName = new string[] { "高媛媛", "管理员" };
+                viewPermissionData = viewPermissionData.Where(x => !notName.Any(x1 => x.Name.Contains(x1))).ToList();
+            }
+
+            //添加特定人员
+            var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+            if (feeBasePerm.Any())
+            {
+                viewPermissionData.AddRange(feeBasePerm);
+                return viewPermissionData.GroupBy(x => x.Id).Select(x => x.First()).OrderBy(x => x.Id).ToList();
+            }
+
             return viewPermissionData;
         }
 
@@ -50,7 +66,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <param name="groupId">草稿Id</param>
         /// <param name="permission">操作权限 1:查看;2:新增;3:编辑;4:删除;5:下载; </param>
         /// <returns></returns>
-        public async Task<bool> PermissionValidationAsync(int darftId, int userId, int permission=1)
+        public async Task<bool> PermissionValidationAsync(int darftId, int userId, int permission = 1)
         {
             //参数验证
             if (darftId < 1) return false;
@@ -58,8 +74,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
             if (!permissionIds.Contains(permission)) return false;
 
             var info = await _sqlSugar.Queryable<Grp_EnterExitCostDraftPermission>()
-                     .Where(it => it.DraftId == darftId && it.UserId == userId && it.Permission == permission)
-                     .FirstAsync();
+                .Where(it => it.DraftId == darftId && it.UserId == userId && it.Permission == permission)
+                .FirstAsync();
             if (info != null) return true;
 
             return false;
@@ -82,23 +98,16 @@ namespace OASystem.Infrastructure.Repositories.Groups
             {
                 status = await PermissionValidationAsync(id, currUserId);//查看权限
                 if (enterExitCostData.CreateUserId == currUserId) status = true; //查看权限
-                if (!status)
-                {
-                    var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync();
+                if (!status) msg = $"未分配查看权限,如要查看,请联系市场部或国交部负责人!";
 
-                    msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据,如要查看,请联系{setUserName}!";
-                }
                 return (status, msg);
             }
             else if (permissionType == 2)
             {
-                if (enterExitCostData.CreateUserId == currUserId) status = true; //编辑权限
-                if (!status)
-                {
-                    var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync();
+                status = await PermissionValidationAsync(id, currUserId);//查看权限
+                if (enterExitCostData.CreateUserId == currUserId) status = true; //查看权限
+                if (!status) msg = $"未分配查看权限,如要查看,请联系市场部或国交部负责人!";
 
-                    msg = $"您没有编辑权限,“{setUserName}”才可编辑!";
-                }
                 return (status, msg);
 
             }
@@ -126,30 +135,31 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
                     enterExitCostInfoView = _mapper.Map<EnterExitCostDraftInfoView>(enterExitCostDraftData);
 
-                    var isView = await PermissionValidationAsync(enterExitCostDraftData.Id, dto.CurrUserId);
+                    bool assignPerm = await PermissionValidationAsync(enterExitCostDraftData.Id, dto.CurrUserId);
 
-                    if (isView) enterExitCostInfoView.IsView = true; //查看权限
-
-                    if (enterExitCostDraftData.CreateUserId == dto.CurrUserId)
+                    if (assignPerm)
                     {
                         enterExitCostInfoView.IsSave = true; //操作权限
                         enterExitCostInfoView.IsView = true; //查看权限
                     }
-
-                    if (!enterExitCostInfoView.IsView)
+                    else
                     {
-                        var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostDraftData.CreateUserId).Select(x => x.CnName).FirstAsync();
-
-                        result.Msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据-草稿,如要查看,请联系{setUserName}!";
+                        result.Msg = "未分配查看权限,如要查看,请联系市场部或国交部负责人!";
                         return result;
                     }
 
-                    enterExitCostInfoView.ViewUsers = await _sqlSugar
-                        .Queryable<Grp_EnterExitCostDraftPermission>()
-                        .Where(x => x.IsDel == 0 && x.DraftId == id)
-                        .Select(x => x.UserId)
-                        .ToArrayAsync();
+                    //设置权限按钮
+                    var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+                    if (feeBasePerm.Any(x => x.Id == dto.CurrUserId))
+                    {
+                        enterExitCostInfoView.IsAssignPerm = true;
 
+                        enterExitCostInfoView.ViewUsers = await _sqlSugar
+                            .Queryable<Grp_EnterExitCostDraftPermission>()
+                            .Where(x => x.IsDel == 0 && x.DraftId == id)
+                            .Select(x => x.UserId)
+                            .ToArrayAsync();
+                    }
 
                     var dayAndCostDraftSql = string.Format(@"Select ntf.Country,ntf.City,ssd.Name CurremcyCode,ssd.Remark CurrencyName,gdac.* From Grp_DayAndCostDraft gdac
                                                         Left Join Grp_NationalTravelFee ntf On ntf.Id = gdac.NationalTravelFeeId
@@ -157,7 +167,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                                         Where gdac.Isdel = 0 And ntf.IsDel = 0 And gdac.ParentId = {0} Order By [Type] ASC,[Days] ASC", id);
                     var dayAndCostDraftData = await _sqlSugar.SqlQueryable<DayAndCostDraftInfoView>(dayAndCostDraftSql).ToListAsync();
 
-
                     enterExitCostInfoView.QuarterageData = dayAndCostDraftData.Where(it => it.Type == 1).ToList(); //住宿费 1
                     enterExitCostInfoView.BoardWagesData = dayAndCostDraftData.Where(it => it.Type == 2).ToList(); //伙食费 2
                     enterExitCostInfoView.MiscellaneousFeeData = dayAndCostDraftData.Where(it => it.Type == 3).ToList();  //公杂费 3
@@ -261,23 +270,21 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     var isNull = _sqlSugar.Queryable<Grp_EnterExitCostDraft>().Where(it => it.IsDel == 0 && it.DraftName.Equals(dto.DraftName)).First();
                     if (isNull != null) //修改
                     {
-                        ////编辑验证
-                        //if (isNull.CreateUserId != dto.UserId)
-                        //{
-                        //    var userName = _sqlSugar.Queryable<Sys_Users>().Where(x => isNull.CreateUserId == isNull.Id).Select(x => x.CnName).First();
-                        //    _sqlSugar.RollbackTran();
-                        //    result.Msg = $"该条信息只有操作人“{userName}”可修改!";
-                        //    return result;
-                        //}
 
-                        var updateId = _sqlSugar.Updateable(enterExitCost)
-                                                .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel })
-                                                .WhereColumns(it => it.DraftName)
-                                                .ExecuteCommand();
-                        if (updateId > 0)
+                        var assignPerm = await PermissionValidationAsync(enterExitCost.Id, dto.UserId);
+                        if (!assignPerm)
                         {
-                            enterExitId = isNull.Id;
+                            _sqlSugar.RollbackTran();
+                            result.Msg = "未分配编辑权限,如要编辑,请联系市场部或国交部负责人!";
+                            return result;
                         }
+
+                        var updateId = _sqlSugar.Updateable(enterExitCost)
+                            .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel })
+                            .WhereColumns(it => it.DraftName)
+                            .ExecuteCommand();
+
+                        if (updateId > 0) enterExitId = isNull.Id;
                         else
                         {
                             _sqlSugar.RollbackTran();
@@ -298,28 +305,25 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         subData.Select(x => { x.Id = 0; return x; }).ToList();
                         dto.DayOtherPriceData.Select(x => { x.Id = 0; return x; }).ToList();
 
-                        //默认添加查看权限
-                        var users = await PermissionViewUsersAsync();
-                        var userIds = users.Select(x => x.Id).ToList();
-                        if (userIds.Any())
-                        {
-                            var permissions = new List<Grp_EnterExitCostDraftPermission>();
-                            foreach (var userId in userIds)
-                            {
-                                permissions.Add(new Grp_EnterExitCostDraftPermission()
-                                {
-                                    DraftId = enterExitId,
-                                    UserId = userId,
-                                    Permission = 1
-                                });
-                            }
+                        //默认添加查看、编辑权限(创建人、自己) 
+                        var feeBasePermIds = new List<int>() { dto.UserId };
 
-                            if (permissions.Any())
+                        var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+                        if (feeBasePerm.Any()) feeBasePermIds.AddRange(feeBasePerm.Select(x => x.Id).ToList());
+
+                        var permissions = new List<Grp_EnterExitCostDraftPermission>();
+                        foreach (var userId in feeBasePermIds)
+                        {
+                            permissions.Add(new Grp_EnterExitCostDraftPermission()
                             {
-                                _sqlSugar.Insertable(permissions).ExecuteReturnIdentity();
-                            }
+                                DraftId = enterExitId,
+                                UserId = userId,
+                                Permission = 1,
+                                CreateUserId = dto.UserId,
+                            });
                         }
 
+                        if (permissions.Any()) await _sqlSugar.Insertable(permissions).ExecuteReturnIdentityAsync();
                     }
 
                     if (enterExitId > 0)

+ 125 - 133
OASystem/OASystem.Infrastructure/Repositories/Groups/EnterExitCostRepository.cs

@@ -1,5 +1,6 @@
 
 using AutoMapper;
+using EyeSoft.Runtime.InteropServices;
 using NPOI.SS.Formula.Functions;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Groups;
@@ -38,22 +39,37 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <returns></returns>
         public async Task<List<PermissionViewUserview>> PermissionViewUsersAsync()
         {
-            var gj_jobPostIds = new List<int>() { 22, 32 };
+            //添加市场部人员
             var viewPermissionData = await _sqlSugar.Queryable<Sys_Users>()
-                .Where(x => x.IsDel == 0 
-                            && ((x.DepId == 7 && gj_jobPostIds.Contains(x.JobPostId)) 
-                            || x.DepId == 6)
-                            && !x.CnName.Equals("高媛媛"))
-                .Select(x => new PermissionViewUserview { Id = x.Id, Name = x.CnName })
+                .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)
+                .Where((u, d) => u.IsDel == 0 && u.HrAudit == 1 && d.DepName.Equals("市场部"))
+                .Select((u, d) => new PermissionViewUserview { Id = u.Id, Name = u.CnName })
                 .ToListAsync();
 
+            //去掉特殊人员
+            if (viewPermissionData.Any())
+            {
+                var notName = new string[] { "高媛媛", "管理员" };
+                viewPermissionData = viewPermissionData.Where(x => !notName.Any(x1 => x.Name.Contains(x1))).ToList();
+            }
+
+            //添加特定人员
+            var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+            if (feeBasePerm.Any())
+            {
+                viewPermissionData.AddRange(feeBasePerm);
+                return viewPermissionData.GroupBy(x => x.Id).Select(x => x.First()).OrderBy(x => x.Id).ToList();
+            }
+
             return viewPermissionData;
         }
 
+
         /// <summary>
         /// 出入境费用正式 --> 权限验证
         /// </summary>
         /// <param name="groupId">团组Id</param>
+        /// <param name="userId">用户Id</param>
         /// <param name="permission">操作权限 1:查看;2:新增;3:编辑;4:删除;5:下载; </param>
         /// <returns></returns>
         public async Task<bool> PermissionValidationAsync(int groupId, int userId, int permission = 1)
@@ -64,14 +80,18 @@ namespace OASystem.Infrastructure.Repositories.Groups
             var permissionIds = new List<int>() { 1, 2, 3, 4, 5 };
             if (!permissionIds.Contains(permission)) return false;
 
+            //var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+            //if (feeBasePerm.Any(x => x.Id == userId)) return true;
+
             var info = await _sqlSugar.Queryable<Grp_EnterExitCostPermission>()
-                     .Where(it => it.GroupId == groupId && it.UserId == userId && it.Permission == permission)
-                     .FirstAsync();
+                .Where(it => it.GroupId == groupId && it.UserId == userId && it.Permission == permission)
+                .FirstAsync();
             if (info != null) return true;
 
             return false;
         }
 
+
         /// <summary>
         /// 更新出入境费用汇率信息
         /// </summary>
@@ -110,38 +130,36 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <param name="currUserId"></param>
         /// <param name="permissionType">1 查看 2 编辑</param>
         /// <returns></returns>
-        public async Task<(bool, string)> MobilePermissionsValidationAsync(int groupId,int currUserId,int permissionType = 1)
+        public async Task<(bool, string)> MobilePermissionsValidationAsync(int groupId, int currUserId, int permissionType = 1)
         {
-            bool status = false;
             string msg = string.Empty;
+            bool assignPerm = await PermissionValidationAsync(groupId, currUserId);//分配权限
 
-            var enterExitCostData = await _sqlSugar.Queryable<Grp_EnterExitCost>().OrderByDescending(x => x.CreateTime).FirstAsync(it => it.DiId == groupId && it.IsDel == 0);
+            var enterExitCostData = await _sqlSugar
+                .Queryable<Grp_EnterExitCost>()
+                .OrderByDescending(x => x.CreateTime)
+                .FirstAsync(it => it.DiId == groupId && it.IsDel == 0);
             if (permissionType == 1)
             {
-                status = await PermissionValidationAsync(groupId, currUserId);//查看权限
-                if (enterExitCostData.CreateUserId == currUserId) status = true; //查看权限
-                if (!status)
-                {
-                    var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync();
 
-                    msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据,如要查看,请联系{setUserName}!";
+                if (!assignPerm || enterExitCostData.CreateUserId != currUserId)
+                {
+                    msg = $"未分配查看权限,如要查看,请联系市场部或国交部负责人!";
                 }
-                return (status, msg);
+                return (true, msg);
             }
             else if (permissionType == 2)
             {
-                if (enterExitCostData.CreateUserId == currUserId) status = true; //编辑权限
-                if (!status)
+                //if (enterExitCostData.CreateUserId == currUserId) status = true; //编辑权限
+                if (!assignPerm || enterExitCostData.CreateUserId != currUserId)
                 {
-                    var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync();
-
-                    msg = $"您没有编辑权限,“{setUserName}”才可编辑!";
+                    msg = $"未分配编辑权限,如要编辑,请联系市场部或国交部负责人!";
                 }
-                return (status, msg);
+                return (true, msg);
 
             }
             else msg = $"请传入正确的权限验证类型!";
-            return (status, msg);
+            return (false, msg);
         }
 
         /// <summary>
@@ -150,7 +168,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
         /// <returns></returns>
         public async Task<JsonView> GetEnterExitCostInfoByDiId(EnterExitCostInfobyDiIdDto dto)
         {
-            var result = new JsonView() { Code = 400 , Msg = "暂无数据" };
+            var result = new JsonView() { Code = 400, Msg = "暂无数据" };
 
             var enterExitCostData = await _sqlSugar.Queryable<Grp_EnterExitCost>().OrderByDescending(x => x.CreateTime).FirstAsync(it => it.DiId == dto.DiId && it.IsDel == 0);
 
@@ -164,40 +182,32 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 {
                     enterExitCostInfoView = _mapper.Map<EnterExitCostInfoView>(enterExitCostData);
 
-                    var isView = await PermissionValidationAsync(dto.DiId, dto.CurrUserId);
-                    if (isView)
+                    bool assignPerm = await PermissionValidationAsync(dto.DiId, dto.CurrUserId);
+                    if (assignPerm || enterExitCostData.CreateUserId == dto.CurrUserId)
                     {
                         enterExitCostInfoView.IsSave = true; //操作权限
                         enterExitCostInfoView.IsView = true; //查看权限
                     }
                     else
                     {
-                        result.Msg = $"未分配查看或编辑权限,如要查看或编辑,请联系市场部或国交部负责人!";
+                        result.Msg = $"未分配查看权限,如要查看,请联系市场部或国交部负责人!";
                         return result;
                     }
 
-                    //var isView = await PermissionValidationAsync(dto.DiId, dto.CurrUserId);
-                    //if (isView) enterExitCostInfoView.IsView = true; //查看权限
-
-                    //if (enterExitCostData.CreateUserId == dto.CurrUserId)
-                    //{
-                    //    enterExitCostInfoView.IsSave = true; //操作权限
-                    //    enterExitCostInfoView.IsView = true; //查看权限
-                    //}
-
-                    //if (!enterExitCostInfoView.IsView)
-                    //{
-                    //    var setUserName = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.Id == enterExitCostData.CreateUserId).Select(x => x.CnName).FirstAsync();
+                    //设置权限按钮
+                    var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+                    if (feeBasePerm.Any(x => x.Id == dto.CurrUserId))
+                    {
+                        enterExitCostInfoView.IsAssignPerm = true;
 
-                    //    result.Msg = $"{setUserName}设置了你不能查看当前团组的出入境费用明细数据,如要查看,请联系{setUserName}!";
-                    //    return result;
-                    //}
+                        enterExitCostInfoView.ViewUsers = await _sqlSugar
+                            .Queryable<Grp_EnterExitCostPermission>()
+                            .Where(x => x.IsDel == 0 && x.GroupId == dto.DiId)
+                            .Select(x => x.UserId)
+                            .ToArrayAsync();
+                    }
 
-                    enterExitCostInfoView.ViewUsers = await _sqlSugar
-                        .Queryable<Grp_EnterExitCostPermission>()
-                        .Where(x => x.IsDel == 0 && x.GroupId == dto.DiId)
-                        .Select(x => x.UserId)
-                        .ToArrayAsync();
+                   
 
                     //enterExitCostInfoView.FirstItemRemark = enterExitCostData.Remark;
                     var dayAndCostSql = string.Format(@"Select ntf.Country,ntf.City,ssd.Name CurremcyCode,ssd.Remark CurrencyName,gdac.* From Grp_DayAndCost gdac
@@ -206,27 +216,26 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                                         Where gdac.Isdel = 0 And ntf.IsDel = 0 And gdac.DiId = {0} Order By [Type] ASC,[Days] ASC", dto.DiId);
                     var dayAndCostData = await _sqlSugar.SqlQueryable<DayAndCostInfoView>(dayAndCostSql).ToListAsync();
 
-
                     enterExitCostInfoView.QuarterageData = dayAndCostData.Where(it => it.Type == 1).ToList(); //住宿费 1
                     enterExitCostInfoView.BoardWagesData = dayAndCostData.Where(it => it.Type == 2).ToList(); //伙食费 2
                     enterExitCostInfoView.MiscellaneousFeeData = dayAndCostData.Where(it => it.Type == 3).ToList();  //公杂费 3
                     enterExitCostInfoView.TrainingExpenseData = dayAndCostData.Where(it => it.Type == 4).ToList();  //培训费 4
 
                     enterExitCostInfoView.DayOtherPriceData = _sqlSugar.Queryable<Grp_DayOtherPrice>()
-                                                                .Where(x => x.IsDel == 0 && x.Diid == dto.DiId)
-                                                                .OrderBy(x => x.Index)
-                                                                .Select(x => new DayOtherPriceView
-                                                                {
-                                                                    DiId = x.Diid,
-                                                                    Id = x.Id,
-                                                                    Cost = x.Cost,
-                                                                    Currency = x.Currency,
-                                                                    Index = x.Index,
-                                                                    SetDataId = x.SetDataId,
-                                                                    SubTotal = x.SubTotal,
-                                                                    Remark = x.Remark,
-                                                                })
-                                                                .ToList();
+                        .Where(x => x.IsDel == 0 && x.Diid == dto.DiId)
+                        .OrderBy(x => x.Index)
+                        .Select(x => new DayOtherPriceView
+                        {
+                            DiId = x.Diid,
+                            Id = x.Id,
+                            Cost = x.Cost,
+                            Currency = x.Currency,
+                            Index = x.Index,
+                            SetDataId = x.SetDataId,
+                            SubTotal = x.SubTotal,
+                            Remark = x.Remark,
+                        })
+                        .ToList();
 
                     enterExitCostInfoView.Currencys = (List<CurrencyInfo>?)CommonFun.GetCurrencyChinaToList(enterExitCostData.CurrencyRemark);
 
@@ -266,7 +275,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     mobileInfo = _mapper.Map<EnterExitCostMobileInfoView>(enterExitCostData);
 
                     var dayAndCostData = _sqlSugar.Queryable<Grp_DayAndCost>()
-                        .LeftJoin<Grp_NationalTravelFee>((dac,ntf) => dac.NationalTravelFeeId == ntf.Id)
+                        .LeftJoin<Grp_NationalTravelFee>((dac, ntf) => dac.NationalTravelFeeId == ntf.Id)
                         .LeftJoin<Sys_SetData>((dac, ntf, sd) => dac.Currency == sd.Id)
                         .Where((dac, ntf, sd) => dac.IsDel == 0 && dac.DiId == dto.DiId)
                         .Select((dac, ntf, sd) => new DayAndCostMobileInfoView
@@ -276,7 +285,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             Type = dac.Type,
                             Days = dac.Days,
                             NationalTravelFeeId = dac.NationalTravelFeeId,
-                            Arae =  $"{ntf.Country}-{ntf.City}",
+                            Arae = $"{ntf.Country}-{ntf.City}",
                             Cost = dac.Cost,
                             Currency = dac.Currency,
                             CurrencyName = sd.Name,
@@ -285,7 +294,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         .ToList();
 
                     mobileInfo.ChoiceOneTotalCost = enterExitCostData.InsidePay;
-                    mobileInfo.ChoiceOneDetails = new ChoiceOneMobileInfoView() { 
+                    mobileInfo.ChoiceOneDetails = new ChoiceOneMobileInfoView()
+                    {
                         Visa = enterExitCostData.Visa,
                         VisaRemark = enterExitCostData.VisaRemark,
                         YiMiao = enterExitCostData.YiMiao,
@@ -294,10 +304,10 @@ namespace OASystem.Infrastructure.Repositories.Groups
                         Ticket = enterExitCostData.Ticket,
                         Safe = enterExitCostData.Safe,
                     };
-                    mobileInfo.ChoiceTwoDetails = new ChoiceTwoMobileInfoView() 
-                    {   
-                        AirJJ = enterExitCostData.AirJJ, 
-                        AirGW = enterExitCostData.AirGW, 
+                    mobileInfo.ChoiceTwoDetails = new ChoiceTwoMobileInfoView()
+                    {
+                        AirJJ = enterExitCostData.AirJJ,
+                        AirGW = enterExitCostData.AirGW,
                         AirTD = enterExitCostData.AirTD,
                         CityTranffic = enterExitCostData.CityTranffic
                     };
@@ -305,11 +315,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     mobileInfo.ChoiceFourDetails = dayAndCostData.Where(it => it.Type == 2).OrderBy(it => it.Days).ToArray();  //伙食费 2
                     mobileInfo.ChoiceFiveDetails = dayAndCostData.Where(it => it.Type == 3).OrderBy(it => it.Days).ToArray();  //公杂费 3
                     mobileInfo.ChoiceSixDetails = dayAndCostData.Where(it => it.Type == 4).OrderBy(it => it.Days).ToArray();   //培训费 4
-                    
+
                     //其他款项
                     mobileInfo.OtherExpensesDetails = _sqlSugar.Queryable<Grp_DayOtherPrice>()
-                        .LeftJoin<Sys_SetData>((dop,sd1) => dop.SetDataId == sd1.Id)
-                        .LeftJoin<Sys_SetData>((dop, sd1,sd2) => dop.Currency == sd2.Id)
+                        .LeftJoin<Sys_SetData>((dop, sd1) => dop.SetDataId == sd1.Id)
+                        .LeftJoin<Sys_SetData>((dop, sd1, sd2) => dop.Currency == sd2.Id)
                         .Where((dop, sd1, sd2) => dop.IsDel == 0 && dop.Diid == dto.DiId)
                         .OrderBy((dop, sd1, sd2) => dop.Index)
                         .Select((dop, sd1, sd2) => new DayOtherPriceMobileInfoView
@@ -384,38 +394,22 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 try
                 {
                     int enterExitId = 0;
-                    
+
                     if (enterExitCost.Id > 0) //修改
                     {
-                        ////操作权限验证 只有创建人可修改
-                        //var info = await _sqlSugar.Queryable<Grp_EnterExitCost,Sys_Users>((eec,u) => new JoinQueryInfos(JoinType.Left,eec.CreateUserId == u.Id))
-                        //    .Where((eec, u) => eec.IsDel == 0 && eec.Id == enterExitCost.Id)
-                        //    .Select((eec, u) => new { eec.CreateUserId,u.CnName })
-                        //    .FirstAsync();
-                        //if (info.CreateUserId != dto.UserId)
-                        //{
-                            
-                        //    _sqlSugar.RollbackTran();
-                        //    result.Msg = $"该条信息只有操作人“{info.CnName}”可修改!";
-                        //    return result;
-                        //}
-
-                        //修改验证
-                        //IsConfirm == 2 不可修改
-                        //var info = _sqlSugar.Queryable<Grp_EnterExitCost>().Where(it => it.IsDel == 0 && it.Id == enterExitCost.Id).First();
-                        //if (info.IsConfirm == 2)
-                        //{
-                        //    result.Msg = "该团出入境费用已确认!不可更改!!";
-                        //    return result;
-                        //}
+                        //操作权限验证 可查看人员亦可编辑
+                        var assignPerm = await PermissionValidationAsync(enterExitCost.DiId, dto.UserId);
+                        if (!assignPerm)
+                        {
+                            _sqlSugar.RollbackTran();
+                            result.Msg = "未分配编辑权限,如要编辑,请联系市场部或国交部负责人!";
+                            return result;
+                        }
 
                         var updateId = _sqlSugar.Updateable<Grp_EnterExitCost>(enterExitCost)
                                                 .IgnoreColumns(it => new { it.DeleteUserId, it.DeleteTime, it.CreateUserId, it.CreateTime, it.IsDel })
                                                 .ExecuteCommand();
-                        if (updateId > 0)
-                        {
-                            enterExitId = enterExitCost.Id;
-                        }
+                        if (updateId > 0) enterExitId = enterExitCost.Id;
                         else
                         {
                             _sqlSugar.RollbackTran();
@@ -427,12 +421,11 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     {
                         //效重 根据团组Id 
                         var info = _sqlSugar.Queryable<Grp_EnterExitCost>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).First();
-                        if (info != null )
+                        if (info != null)
                         {
                             _sqlSugar.RollbackTran();
                             result.Msg = "该团组相关数据已存在,请勿重新添加!";
                             return result;
-
                         }
 
                         //添加
@@ -444,28 +437,25 @@ namespace OASystem.Infrastructure.Repositories.Groups
                             return result;
                         }
 
-                        //默认添加查看权限
-                        var users = await PermissionViewUsersAsync();
-                        var userIds = users.Select(x => x.Id).ToList();
-                        if (userIds.Any())
-                        {
-                            var permissions = new List<Grp_EnterExitCostPermission>();
-                            foreach (var userId in userIds)
-                            {
-                                permissions.Add(new Grp_EnterExitCostPermission()
-                                {
-                                    GroupId = enterExitCost.DiId,
-                                    UserId = userId,
-                                    Permission = 1,
-                                    CreateUserId = dto.UserId,
-                                });
-                            }
+                        //默认添加查看、编辑权限(创建人、自己) 
+                        var feeBasePermIds = new List<int>() { dto.UserId };
+
+                        var feeBasePerm = AppSettingsHelper.Get<PermissionViewUserview>("FeeBasePerm");
+                        if (feeBasePerm.Any()) feeBasePermIds.AddRange(feeBasePerm.Select(x => x.Id).ToList());
 
-                            if (permissions.Any())
+                        var permissions = new List<Grp_EnterExitCostPermission>();
+                        foreach (var userId in feeBasePermIds)
+                        {
+                            permissions.Add(new Grp_EnterExitCostPermission()
                             {
-                                _sqlSugar.Insertable(permissions).ExecuteReturnIdentity();
-                            }
+                                GroupId = enterExitCost.DiId,
+                                UserId = userId,
+                                Permission = 1,
+                                CreateUserId = dto.UserId,
+                            });
                         }
+
+                        if (permissions.Any()) await _sqlSugar.Insertable(permissions).ExecuteReturnIdentityAsync();
                     }
 
                     if (enterExitId > 0)
@@ -499,7 +489,6 @@ namespace OASystem.Infrastructure.Repositories.Groups
             }
             else result.Msg = MsgTips.Port;
 
-
             return result;
         }
 
@@ -529,7 +518,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                         .SetColumns(x => new Grp_EnterExitCost() { IsConfirm = confirm })
                                         .Where(x => x.Id == dto.Id)
                                         .ExecuteCommandAsync();
-            if (update>0)
+            if (update > 0)
             {
                 _view.Code = 200;
                 _view.Msg = "操作成功!";
@@ -638,7 +627,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
             if (userId < 1) return result = new Result() { Code = -1, Msg = "请传入有效的UserId参数!" };
 
             BeginTran();
-            Grp_EnterExitCost _EnterExitCost = new Grp_EnterExitCost() { 
+            Grp_EnterExitCost _EnterExitCost = new Grp_EnterExitCost()
+            {
                 Id = id,
                 IsDel = 1,
                 DeleteUserId = userId,
@@ -647,14 +637,16 @@ namespace OASystem.Infrastructure.Repositories.Groups
 
             //int update = await _sqlSugar.Updateable<Grp_EnterExitCost>(_EnterExitCost).Where(it => it.Id == id).ExecuteCommandAsync();
             int update = await _sqlSugar.Updateable<Grp_EnterExitCost>(_EnterExitCost)
-                                        .UpdateColumns(it => new { 
-                                            it.IsDel,
-                                            it.DeleteUserId ,
-                                            it.DeleteTime
-                                        })
-                                        .Where(it => it.Id == id).ExecuteCommandAsync();
-
-            if (update > 0) {
+                .UpdateColumns(it => new
+                {
+                    it.IsDel,
+                    it.DeleteUserId,
+                    it.DeleteTime
+                })
+                .Where(it => it.Id == id).ExecuteCommandAsync();
+
+            if (update > 0)
+            {
                 string sqlDelete = string.Format(@"Delete From Grp_DayAndCost Where Diid = {0} ", diId);
                 await ExecuteCommandAsync(sqlDelete);
                 result.Code = 0;
@@ -666,7 +658,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 result.Msg = "操作失败";
                 RollbackTran();
             }
-            
+
             return result;
         }