ASP.NET Core:按用户部门ID空值分配传真权限及导航栏控制问题
解决方案
1. 实现根据用户部门权限加载传真数据
修改OnGetAsync方法,先获取当前登录用户,再根据用户的DepartId是否为空决定加载所有传真还是仅所属部门的传真,同时修正分页逻辑(分页需作用在传真数据查询上,而非用户查询):
public ICollection<Fax> Faxes { get; set; } public int PageSize { get; set; } public int TotalFaxes { get; set; } public int PageNo { get; set; } public async Task OnGetAsync(int s = 5, int p = 1) { PageSize = s; PageNo = p; // 获取当前登录用户 var username = HttpContext.Session.GetString("username"); var currentUser = await _context.Registers .Include(r => r.Depart) .SingleOrDefaultAsync(r => r.UserName == username); if (currentUser == null) { // 未找到用户,返回空数据 Faxes = new List<Fax>(); TotalFaxes = 0; return; } IQueryable<Fax> faxQuery = _context.Faxes; if (currentUser.DepartId != null) { // 用户绑定了部门,仅加载该部门的传真 faxQuery = faxQuery.Where(f => f.DepartmentId == currentUser.DepartId); } // DepartId为空时,默认加载所有传真 // 计算总条数 TotalFaxes = await faxQuery.CountAsync(); // 分页获取数据 Faxes = await faxQuery .Skip((p - 1) * s) .Take(s) .ToListAsync(); }
代码说明
- 单独查询当前登录用户,避免嵌套查询导致的分页逻辑错误
- 根据
currentUser.DepartId动态构建查询条件,实现权限控制 - 分页逻辑直接作用在传真数据集上,保证分页结果准确
- 增加用户不存在的边界处理,避免空引用异常
2. 布局页实现登录前隐藏导航栏
在布局页(如_Layout.cshtml)中,通过判断Session中是否存在username来控制导航栏的显示:
@if (HttpContext.Session.GetString("username") != null) { <!-- 登录后显示的导航栏 --> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <a class="navbar-brand" asp-page="/Index">传真管理系统</a> <div class="collapse navbar-collapse"> <ul class="navbar-nav mr-auto"> <li class="nav-item"> <a class="nav-link" asp-page="/Fax/Index">传真列表</a> </li> <!-- 其他导航项 --> </ul> <span class="navbar-text"> 当前用户: @HttpContext.Session.GetString("username") <a asp-page="/Account/Logout" class="btn btn-sm btn-outline-light">退出</a> </span> </div> </nav> } <div class="container mt-4"> @RenderBody() </div>
前置配置
确保已在项目中启用Session(.NET 6+ 配置在Program.cs):
builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); // 在app.UseRouting()之后添加 app.UseSession();
内容的提问来源于stack exchange,提问作者hossam reda
相关产品推荐
相关产品推荐

