###**權限擴展**
### **sentCMS權限判斷流程按順序如下:**
**1.IP 權限檢測**,如果配置了IP白名單(ADMIN_ALLOW_IP),則僅有白名單的IP可以通過這一步檢測。其他IP被直接拒絕。
**2.特殊節點檢測,**特殊節點有兩種。一種是任何管理員都可以訪問的節點(ALLOW_VISIT),例如修改密碼; 一種是除超級管理員外,任何管理員都不能訪問的節點(DENY_VISIT), 例如僅供超級管理員使用的功能或者某些不提供外部訪問但因為編碼需要不得不定義為public的方法。
如果ALLOW_VISIT檢測通過,直接放行訪問。如果DENY_VISIT檢測通過,直接拒絕。如果二者都未通過,則會進入下一步權限檢測。
PS:在二次開發完成后,應仔細檢查每個控制的公共方法,包括繼承的公共方法。確保每個公共方法,出現在菜單,ALLOW_VISIT,DENY_VISIT之一。
**3.動態檢測**,即有些url是后來動態的,例如分類,不可能我們每創建一個分類就為這個分類添加一個節點,更不可能每添加一篇文檔就為這篇文檔添加一個節點,這樣不僅管理麻煩而且節點數量也會爆炸性增長。因此,需要寫一段程序來檢測此類url,詳細擴展方法見下文。
**4.菜單節點檢測**,即通過菜單”管理配置“的節點,在”權限管理->訪問授權“進行設置控制。檢測通過后放行,否則拒絕。
### **動態權限檢測擴展**
**相關數據表**
**auth_extend**
**group_id** 保存用戶組id
**type** 權限擴展類型,"分類授權"的type為1,如果要擴展授權,您要為您的擴展權限類型規定一個type值,與其他類型的擴展授權區分。
**extend_id** 保存用戶組關聯的擴展數據的id,對"分類授權"而言,該字段保存的自然就是分類的id了
**模型代碼編寫**
您需要在 AuthGroupModel 模型中定義一個靜態方法,供控制器查詢某個用戶對某個類型的擴展權限擁有權限的數據id。
以"分類授權"為例,AuthGroupModel::getAuthCategories(UID) 方法做了如下事情:
1.根據用戶id,查出用戶所屬用戶組group_id
2.根據group_id,從auth_extend表以type=1為條件查出了extend_id,即用戶擁有權限的分類.
另外,您需要定義一個方法,用來保存權限設定。
以"分類授權"為例,AuthGroupModel::addToCategory($category_id,$uid) 即用來把分類的權限設定寫入auth_extend表
**控制器代碼編寫**
用來執行動態檢測的程序代碼,定義在相應控制器的 checkDynamic方法,因此,需要擴展動態權限檢測時,只需要在你的控制器中創建checkDynamic方法,并在其中實現檢測業務邏輯。sentCMS的分類和文檔的權限控制即通過在ArticleController中定義checkDynamic方法實現。
與模板有關的控制器代碼編寫就不再介紹。
以"分類授權"為例,相關方法如下:
1.addToCategory() 為用戶授權某個分類
2.category() 輸出分類授權設定頁面
**模板代碼編寫**
1.修改View/AuthManager/index.html,增加一個鏈接,指向具體的權限設定頁面
例如:"分類授權"的代碼:<a href="{:U('AuthManager/category?group_name='.$vo['title'].'&group_id='.$vo['id'])}" >分類授權</a>
2.創建您的授權設定頁模板,分類授權設置頁模板位于 View/AuthManager/category.html
- 準備
- 概覽
- 獲取
- 安裝
- 后臺管理
- 首頁
- 內容
- 系統
- 網站設置
- 配置管理
- 菜單管理
- 分類管理
- 模型管理
- 導航管理
- 數據備份
- 擴展
- 用戶
- 用戶信息
- 用戶行為
- 行為日志
- 權限管理
- 應用
- 架構設置
- 應用架構及目錄結構
- 獨立模型
- 插件設計
- 用戶行為設計
- 權限設計
- 文檔模型設計
- 分類設計
- 二次開發
- 命名規范與編碼規范
- 數據字典
- 公共函數和庫函數使用規范
- 模板開發指南
- 權限管理指南
- 插件開發指南
- 什么是插件?
- 什么是鉤子?
- 插件的開發流程
- 插件后臺的開發
- 插件開發注意事項
- 模型擴展開發指南
- 獨立模型擴展
- 文檔模型擴展
- 附錄
- 配置參考
- 函數庫參考
- Common函數庫
- admin函數庫
- Home函數庫
- 類庫參考