數據權限

設計思想:
【數據權限】是在【功能權限】的基礎上面進一步的擴展,好比能夠查看訂單屬於【功能權限】的範圍,可是能夠查看哪些訂單就是【數據權限】的工做了。
根據不一樣的角色定義一些規則,將規則值保存起來。最終將值 轉化成執行腳本里面的值。
Mybatis攔截器的一個做用就是能夠攔截某些方法的調用,能夠選擇在這些被攔截的方法執行先後加上某些邏輯,也能夠在執行這些被攔截的方法時執行本身的邏輯而再也不執行被攔截的方法。
Mybatis攔截器設計的一個初衷就是爲了供用戶在某些時候能夠實現本身的邏輯而沒必要去動Mybatis固有的邏輯。
本方案中便可根據當前用戶的數據範圍動態的組裝成sql做爲全部查詢sql的附加邏輯。
實現:
1,首先找到攔截時機
2,根據攔截器的註解聲明,攔截的是Executor對象query方法
3,根據mabatis源碼,取出在mappedStatement的SQL語句
4,取出sql語句,根據當前用戶,獲取規則,將條件追加到sql中
5,將加強後的sql再放回mappedStatement中spring

攔截器,加入一些權限處理,最後附加到SQL中
clipboard.pngsql

取到當前登錄人信息
clipboard.pngapp

這裏取登錄人信息,用了兩種方式:
一種用 threadlocal, 同一個線程把變量傳過來
另外一種直接在dao層用參數傳過來,偷懶了,沒有實現線程以前變量傳遞,當時狀況是用戶提交一個查詢請求,導出直接提交給另外一個線程 springbatch去處理,因此就把登錄了人的信息直接傳到dao參數上了spa

相關文章
相關標籤/搜索