使用场景说明
在某些情况下调用了框架默认生成的方法,并且页面提示【没有权限操作】,但又没有给用户分配权限,或者不想分配权限,可以直接重写框架方法的权限
使用说明、重写控制器方法、重写控制器方法权限
- 生成页面默认调用的接口需要完全自定义处理
- 页面打开提示【没有权限操作】:先检查菜单上的表名是否正确;如果当前页面调用的其他表查询方法,同时没有分配菜单权限就可以按下面对应的接口重写方法
- 浏览器打开按 F12,点开网络 → 刷新页面,可以看到请求的接口地址(表名)与控制器方法
使用示例
1. 在表的控制器上实现对应的方法来重写权限2. 以 MES_Customer 表控制器为例,在控制器实现 GetPageData 查询方法并添加 [ApiActionPermission] 属性重写权限
public partial class MES_CustomerController
{
private readonly IMES_CustomerService _service;
private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor]
public MES_CustomerController(
IMES_CustomerService service,
IHttpContextAccessor httpContextAccessor
) : base(service)
{
_service = service;
_httpContextAccessor = httpContextAccessor;
}
// 重写查询接口权限,将 GetPageData 方法复制到 [表Controller] 里即可实现权限重写
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult GetPageData([FromBody] PageDataOptions loadData)
{
return base.GetPageData(loadData);
}
}
[vue3代码]写在生成的[表.vue]文件中,[vue2代码]写在[表.jsx]文件methods方法中;二选一实现
主表查询/异步
主表查询
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult GetPageData([FromBody] PageDataOptions loadData)
{
return base.GetPageData(loadData);
}
主表查询异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> GetPageDataAsync([FromBody] PageDataOptions loadData)
{
return await base.GetPageDataAsync(loadData);
}
明细查询/异步
明细查询
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult GetDetailPage([FromBody] PageDataOptions loadData)
{
return base.GetDetailPage(loadData);
}
明细查询异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> GetDetailPageAsync([FromBody] PageDataOptions loadData)
{
return await base.GetDetailPageAsync(loadData);
}
新建/异步
新建
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Add([FromBody] SaveModel saveModel)
{
return base.Add(saveModel);
}
新建异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> AddAsync([FromBody] SaveModel saveModel)
{
return await base.AddAsync(saveModel);
}
编辑/异步
编辑
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Update([FromBody] SaveModel saveModel)
{
return base.Update(saveModel);
}
编辑异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> UpdateAsync([FromBody] SaveModel saveModel)
{
return await base.UpdateAsync(saveModel);
}
文件上传/异步
文件上传
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override IActionResult Upload(IEnumerable<IFormFile> fileInput)
{
return base.Upload(fileInput);
}
文件上传异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<IActionResult> UploadAsync(IEnumerable<IFormFile> fileInput)
{
return await base.UploadAsync(fileInput);
}
下载导入模板/异步
下载导入模板
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult DownLoadTemplate()
{
return base.DownLoadTemplate();
}
下载导入模板异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> DownLoadTemplateAsync()
{
return await base.DownLoadTemplateAsync();
}
导入/异步
导入
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Import(List<IFormFile> fileInput)
{
return base.Import(fileInput);
}
导入异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> ImportAsync(List<IFormFile> fileInput)
{
return await base.ImportAsync(fileInput);
}
导出/异步
导出
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Export([FromBody] PageDataOptions loadData)
{
return base.Export(loadData);
}
导出异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> ExportAsync([FromBody] PageDataOptions loadData)
{
return await base.ExportAsync(loadData);
}
删除/异步
删除
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Del([FromBody] object[] keys)
{
return base.Del(keys);
}
删除异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> DelAsync([FromBody] object[] keys)
{
return await base.DelAsync(keys);
}
审核/异步
审核
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override ActionResult Audit([FromBody] object[] id, int? auditStatus, string auditReason)
{
return base.Audit(id, auditStatus, auditReason);
}
审核异步
[ApiActionPermission] // 移除权限验证,框架只会验证是否登录
//[AllowAnonymous] // 同时加上 AllowAnonymous 属性,未登录的也可以访问
public override async Task<ActionResult> AuditAsync([FromBody] object[] id, int? auditStatus, string auditReason)
{
return await base.AuditAsync(id, auditStatus, auditReason);
}
使用示例(完整)
以下为 MES_CustomerController 示例:将基类 ApiBaseController 中可重写的 Action 全部列出,按需删除或保留;路由与基类保持一致。
public partial class MES_CustomerController
{
private readonly IMES_CustomerService _service;
private readonly IHttpContextAccessor _httpContextAccessor;
[ActivatorUtilitiesConstructor]
public MES_CustomerController(
IMES_CustomerService service,
IHttpContextAccessor httpContextAccessor
) : base(service)
{
_service = service;
_httpContextAccessor = httpContextAccessor;
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("getPageData")]
public override ActionResult GetPageData([FromBody] PageDataOptions loadData)
{
return base.GetPageData(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("getPageDataAsync")]
public override async Task<ActionResult> GetPageDataAsync([FromBody] PageDataOptions loadData)
{
return await base.GetPageDataAsync(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Add")]
public override ActionResult Add([FromBody] SaveModel saveModel)
{
return base.Add(saveModel);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("addAsync")]
public override async Task<ActionResult> AddAsync([FromBody] SaveModel saveModel)
{
return await base.AddAsync(saveModel);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Update")]
public override ActionResult Update([FromBody] SaveModel saveModel)
{
return base.Update(saveModel);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("updateAsync")]
public override async Task<ActionResult> UpdateAsync([FromBody] SaveModel saveModel)
{
return await base.UpdateAsync(saveModel);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("GetDetailPage")]
public override ActionResult GetDetailPage([FromBody] PageDataOptions loadData)
{
return base.GetDetailPage(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("getDetailPageAsync")]
public override async Task<ActionResult> GetDetailPageAsync([FromBody] PageDataOptions loadData)
{
return await base.GetDetailPageAsync(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Upload")]
public override IActionResult Upload(IEnumerable<IFormFile> fileInput)
{
return base.Upload(fileInput);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("uploadAsync")]
public override async Task<IActionResult> UploadAsync(IEnumerable<IFormFile> fileInput)
{
return await base.UploadAsync(fileInput);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpGet, Route("DownLoadTemplate")]
public override ActionResult DownLoadTemplate()
{
return base.DownLoadTemplate();
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpGet, Route("downLoadTemplateAsync")]
public override async Task<ActionResult> DownLoadTemplateAsync()
{
return await base.DownLoadTemplateAsync();
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Import")]
public override ActionResult Import(List<IFormFile> fileInput)
{
return base.Import(fileInput);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("importAsync")]
public override async Task<ActionResult> ImportAsync(List<IFormFile> fileInput)
{
return await base.ImportAsync(fileInput);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Export")]
public override ActionResult Export([FromBody] PageDataOptions loadData)
{
return base.Export(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("exportAsync")]
public override async Task<ActionResult> ExportAsync([FromBody] PageDataOptions loadData)
{
return await base.ExportAsync(loadData);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Del")]
public override ActionResult Del([FromBody] object[] keys)
{
return base.Del(keys);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("delAsync")]
public override async Task<ActionResult> DelAsync([FromBody] object[] keys)
{
return await base.DelAsync(keys);
}
[ApiActionPermission]
//[AllowAnonymous]
[HttpPost, Route("Audit")]
public override ActionResult Audit([FromBody] object[] id, int? auditStatus, string auditReason)
{
return base.Audit(id, auditStatus, auditReason);
}
}
