首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

打造典型 Ruby on Rails 網站(三):權限設計與 ACL 插件實戰

     編輯:Java 相關知識

核心權限模型:角色基礎存取控制 (RBAC)

採用 acl_system2 插件(官方文檔),機制:

  • 使用者可擁有多重角色
  • Controller 歸屬特定角色
  • 三層防護確保權限正確

三層防護實作

1. 強制登入(非角色相關)

before_filter :check_authentication

2. Controller 級角色限制

access_control :DEFAULT => 'ROLE_NAME'

針對使用者角色限制整個 Controller 存取。

3. 程式碼/視圖級細粒度控制

# Controller/Helper
do_admin_stuff if is_user_in_role?('Administrator')

# View (ERB)
<% restrict_to "(Administrator) & !blacklist" do %>
  管理員專屬內容
<% end %>

管理後台架構規範

  1. 所有管理 Controller 置於 administrator/ 目錄:Administrator::NewControllerName
  2. 繼承共同基類:class Administrator::NewControllerName < AdminController
  3. 3. 對應視圖置於 views/administrator/new_controller_name/
  4. Controller 頭部加入 access_control :DEFAULT => 'AdminRole'
  5. 導航選單修改 views/admin/_navigation.html.erb,自動受權限保護
  6. 系統確保至少保留一個超級管理員,防止誤刪導致失管

日誌系統設計:獨立資料庫 + 星型模型

資料庫隔離

config/database.yml 定義獨立 logging 資料庫,分兩類表:

  • Dimension 表:模型變更、使用者操作等原始事件
  • Fact 表:從 Dimension 衍生的彙總分析資料

開發/測試資料生成 Rake 任務

rake logging:clear                    # 清除所有日誌(生產禁用)
rake logging:dimension:mock THOUSANDS=2  # 產生 2000 筆模擬資料
rake logging:geocode:all              # 地理編碼處理
rake logging:fact:all                 # 衍生 Fact 表資料

# 一鍵執行上述所有
script/runner script/logging_mock

定時彙總支援

rake logging:fact:today
rake logging:fact:yesterday
rake logging:fact:range FROM='01/15/2007' TO='12/19/2008'

生產環境嚴格保護防誤刪,開發環境提供豐富模擬工具。

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