---
# System prepended metadata

title: Role Based Access Control (RBAC) 規劃
tags: [TPI-TPIU]

---

page-code:: TPI.TPIU.RBAC
type:: post
status:: done
relation:: [gist](https://gist.github.com/wanyutang/095ccd0867f1f38f43ebada97bc7cac1),[hackmd](https://hackmd.io/@VxulnppPQHuOEDANOU92EQ/SymfrcyRA)

- # Role Based Access Control (RBAC) 規劃
	- This draft contains revisions and references; the full article is available at [[TPIU 昕力大學]][↗](https://www.tpisoftware.com/tpu/articleDetails/3110).
- ## 簡介
	- 專案開發需要一套權限管理系統，能夠簡化權限配置流程，減少錯誤，並提供更高的擴展性和可管理性。以下將介紹如何設計一個靈活且可擴展的權限管理架構及其實作步驟。
- ## 前言
	- 隨著系統角色和權限結構的複雜化，設計架構需要考量以下問題：
		- **權限管理複雜性**: 隨著角色和權限數量的增加，權限管理變得越來越複雜。每新增一個角色或功能，都需要手動更新配置，這使得管理變得繁瑣且易出錯。
		  logseq.order-list-type:: number
		- **不一致的訪問控制**: 不同用戶可能擁有不同的權限，這可能導致某些用戶無法訪問所需功能，或不應該有權訪問某些敏感功能，從而引發安全問題。
		  logseq.order-list-type:: number
		- **難以擴展**: 當系統擴展時，原有的權限管理系統可能無法輕易地擴展以滿足新需求。這會限制系統的靈活性和未來的擴展能力。
		  logseq.order-list-type:: number
- ## 設計方向
	- 為了解決上述問題，我們需要設計一個可擴展且易於管理的權限控制系統。以下是主要的設計方向：
	- **基於角色的訪問控制**：通過角色來管理用戶的權限，每個角色擁有特定的權限。這樣可以簡化權限配置，並通過角色來集中管理權限。
	  logseq.order-list-type:: number
	- **使用群組和角色的關聯**：將用戶組織到不同的群組中，並將角色分配給群組。用戶通過所屬群組獲得相應的角色和權限，從而簡化管理流程。
	  logseq.order-list-type:: number
	- **清晰的功能與權限映射**：定義明確的功能和權限，並將它們與角色和群組關聯。這樣可以確保每個用戶擁有正確的權限，並且訪問控制過程透明且易於維護。
	  logseq.order-list-type:: number
- ## 流程說明
	- [TPI.TPIU.RBAC.角色群組登入流程圖.mermaid.gist](https://gist.github.com/wanyutang/c1543e8fc73f1912fef3f5c3156aeb68)
- ## 資料表結構
	- [[TPI/TPIU/Role Based Access Control (RBAC) 資料表結構]]
- ## 測試資料
	- [[TPI/TPIU/Role Based Access Control (RBAC) 測試資料]]
- [TPI.TPIU.RBAC.用戶登入權限檢查流程.md.gist](https://gist.github.com/wanyutang/7d0df1b29744a2dd1243da78f84e3ac3)
- ## 總結
	- 通過設計並實施基於角色的訪問控制系統，我們可以簡化權限管理，降低配置和維護的複雜性。
	- 這種方法通過角色、群組和功能的清晰映射，提供了一個靈活且高效的權限管理解決方案。
	- 該系統不僅能夠應對當前的需求，還具有良好的擴展性，能夠適應未來的變化和需求。
- ## 參考來源
	- [初試 Casbin - 快速搭建符合 99% 產品都需要的高彈性可維護之授權控制系統 - marcus](https://hackmd.io/@coscup/rymNETD0O/%2F%40coscup%2Fry-7ETDAO)
	- [如何在您的 Synology NAS 上管理 ACL 權限設定？](https://kb.synology.com/zh-tw/DSM/tutorial/How_to_manage_ACL_settings_on_your_Synology_NAS#x_anchor_id12)