权限配置
This commit is contained in:
parent
da8d63734f
commit
e3273251d6
@ -359,8 +359,8 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
|
|||||||
{
|
{
|
||||||
if (_authManager.IsSuperAdmin) return true;
|
if (_authManager.IsSuperAdmin) return true;
|
||||||
var cache = await GetAuthButtonCodeList(_authManager.UserId);
|
var cache = await GetAuthButtonCodeList(_authManager.UserId);
|
||||||
var output = cache.FirstOrDefault(x => x.Code.Contains(code, StringComparison.CurrentCultureIgnoreCase));
|
var output = cache.FirstOrDefault(x => string.Equals(x.Code, code, StringComparison.CurrentCultureIgnoreCase));
|
||||||
return output?.Access ?? true;
|
return output?.Access ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -371,21 +371,35 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
|
|||||||
[NonAction]
|
[NonAction]
|
||||||
public async Task<List<CheckPermissionOutput>> GetAuthButtonCodeList(long userId)
|
public async Task<List<CheckPermissionOutput>> GetAuthButtonCodeList(long userId)
|
||||||
{
|
{
|
||||||
var cache = await _easyCachingProvider.GetAsync($"{CacheConst.PermissionButtonCodeKey}{userId}", async () =>
|
var cacheKey = $"{CacheConst.PermissionButtonCodeKey}v2.{userId}";
|
||||||
|
var cache = await _easyCachingProvider.GetAsync(cacheKey, async () =>
|
||||||
{
|
{
|
||||||
var queryable = _sysMenuRepository.AsSugarClient().Queryable<SysRole>()
|
var list = await _sysMenuRepository.AsSugarClient()
|
||||||
.InnerJoin<SysUserRole>((role, userRole) => role.Id == userRole.RoleId)
|
.Queryable<SysUserRole>()
|
||||||
.InnerJoin<SysRoleMenu>((role, userRole, roleMenu) => role.Id == roleMenu.RoleId)
|
.InnerJoin<SysRole>((userRole, role) => userRole.RoleId == role.Id)
|
||||||
.Where(role => role.Status == AvailabilityStatus.Enable)
|
.InnerJoin<SysRoleMenu>((userRole, role, roleMenu) => role.Id == roleMenu.RoleId)
|
||||||
.Select((role, userRole, roleMenu) => roleMenu);
|
.InnerJoin<SysMenu>((userRole, role, roleMenu, menu) => roleMenu.MenuId == menu.Id)
|
||||||
var list = await _sysMenuRepository.AsQueryable().LeftJoin(queryable, (menu, roleMenu) => menu.Id == roleMenu.MenuId)
|
.Where((userRole, role, roleMenu, menu) =>
|
||||||
.Where(menu => menu.Type == MenuType.Button || menu.Type == MenuType.DataScope)
|
userRole.UserId == userId &&
|
||||||
.Select((menu, roleMenu) => new CheckPermissionOutput
|
role.Status == AvailabilityStatus.Enable &&
|
||||||
{
|
menu.Status == AvailabilityStatus.Enable &&
|
||||||
Code = menu.Code,
|
(menu.Type == MenuType.Button || menu.Type == MenuType.DataScope))
|
||||||
Access = SqlFunc.IIF(SqlFunc.IsNull(roleMenu.Id, 0) > 0 || menu.Status == AvailabilityStatus.Disable, true, false)
|
.Select((userRole, role, roleMenu, menu) => new CheckPermissionOutput
|
||||||
}).ToListAsync();
|
{
|
||||||
return list.Distinct().ToList();
|
Code = menu.Code,
|
||||||
|
Access = true
|
||||||
|
})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
return list
|
||||||
|
.Where(x => !string.IsNullOrWhiteSpace(x.Code))
|
||||||
|
.GroupBy(x => x.Code)
|
||||||
|
.Select(g => new CheckPermissionOutput
|
||||||
|
{
|
||||||
|
Code = g.Key,
|
||||||
|
Access = true
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
}, TimeSpan.FromDays(1));
|
}, TimeSpan.FromDays(1));
|
||||||
return cache.Value;
|
return cache.Value;
|
||||||
}
|
}
|
||||||
@ -409,4 +423,4 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -344,12 +344,20 @@ public class SysUserService : BaseService<SysUser>, ITransient
|
|||||||
{
|
{
|
||||||
dto.AuthBtnList = _repository.AsSugarClient().Queryable<SysMenu>()
|
dto.AuthBtnList = _repository.AsSugarClient().Queryable<SysMenu>()
|
||||||
.Where(x => x.Type == MenuType.Button || x.Type == MenuType.DataScope)
|
.Where(x => x.Type == MenuType.Button || x.Type == MenuType.DataScope)
|
||||||
.Select(x => x.Code).ToList();
|
.Select(x => x.Code)
|
||||||
|
.ToList()
|
||||||
|
.Where(x => !string.IsNullOrWhiteSpace(x))
|
||||||
|
.Distinct()
|
||||||
|
.ToList();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var list = _sysMenuService.GetAuthButtonCodeList(userId).GetAwaiter().GetResult();
|
var list = _sysMenuService.GetAuthButtonCodeList(userId).GetAwaiter().GetResult();
|
||||||
dto.AuthBtnList = list.Where(x => x.Access).Select(x => x.Code).ToList();
|
dto.AuthBtnList = list
|
||||||
|
.Where(x => x.Access && !string.IsNullOrWhiteSpace(x.Code))
|
||||||
|
.Select(x => x.Code)
|
||||||
|
.Distinct()
|
||||||
|
.ToList();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.FirstAsync();
|
.FirstAsync();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user