首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

數據權限設計:同一用戶擁有多角色時的按鈕顯示與操作控制策略

     編輯:程式設計綜合問答

場景描述

某用戶同時擁有「A 區域管理員」(可增刪改查)與「B 區域普通用戶」(僅可查)兩種角色。頁面需合並顯示兩區域數據列表,且必須展示「修改」「刪除」按鈕,但實際操作時僅允許對 A 區域數據生效。

常見誤區

若根據最高權限顯示按鈕,卻在前端隱藏 B 區域行的操作圖標,會導致:

  • 前端邏輯複雜,需逐行判斷權限渲染。
  • 用戶對 B 區域數據點擊按鈕無反應,體驗差。
  • 繞過前端攔截(如直接呼叫 API)仍可能越權操作。

最佳實踐:後端攔截 + 前端友好提示

  1. 按鈕統一顯示:列表所有行均展示操作按鈕,保持 UI 一致性。
  2. 後端強制校驗:每個修改/刪除 API 入口,根據當前用戶角色與目標數據歸屬,判斷是否有權。無權時返回 403 或自定義錯誤碼。
  3. 前端統一處理 403:攔截響應,彈出友好提示「您無權操作該區域數據」,並可選引導至申請權限流程。
  4. 可選優化:若業務極其敏感,可在列表加載時由後端返回每行的 editable: true/false,前端據此置灰按鈕並禁用點擊,但絕不可省略後端校驗。

代碼示例(Spring Boot + MyBatis)

@DeleteMapping("/data/{id}")
public Result delete(@PathVariable Long id) {
    DataRecord record = dataMapper.selectById(id);
    if (!permissionService.hasRegionAdminRole(currentUser(), record.getRegionId())) {
        return Result.forbidden("無該區域管理權限");
    }
    dataMapper.deleteById(id);
    return Result.ok();
}

總結

「操作時校驗」是核心,「顯示時輔助」是優化。切勿將權限控制完全寄託於前端,後端攔截才是安全基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved