程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 建立一個典型的Ruby On Rails網站(三)

建立一個典型的Ruby On Rails網站(三)

編輯:關於JAVA

第三部分,權限設計和acl插件的使用。感覺這樣的權限設計也是很主流的。

下面,再看看EOL.ORG在權限設計方面是如何實現的,或者使用了什麼插件。

用戶角色設計和權限管理

EOL.org的權限部分采用acl_system plugin的插件,地址如下

http://brainspl.at/articles/2006/02/20/new-plugin-acl_system

機制如下:

用戶可以分配零個或多個角色

一個或多個Controller可以隸屬於一個角色

那麼,保證權限正確限制,可以從以下幾個方面實現:

1. 保證用戶必須登錄才能訪問特定的action或contoller。那麼只需要添加如下語句在controller的開始:

Ruby代碼

     before_filter :check_authentication

這段檢查並不是角色有關的檢查,只是簡單的提供登錄限制。

2. 實現特定的用戶訪問特定的controller。那麼需要在指定的controller,添加

Ruby代碼

     access_control :DEFAULT => 'ROLE NAME GOES HERE'

這一個檢查,將針對用戶的角色(即分配給user的role)來限制controller的讀取。如果,想了解很進一步的有關機制,可以查閱我們使用的plugin(acl_system2)的README說明文檔。那裡的例子還不錯。

3. 項目還提供很方便的controller/helper 方法用來檢查user是否隸屬於某一特定角色或者角色群。("is_user_in_role?"

Ruby代碼

     do_this_method_only_for_admins if is_user_in_role?('Administrator')

4. 項目本身也支持對頁面的某一特定的代碼段或頁面功能段,進行權限設定。這需要調用acl 插件的helper方法對該代碼段添加基於用戶權限的修飾。例如:

Html代碼

     <% restrict_to "(Administrator) & !blacklist" do %> admin stuff here <% end %>

管理功能的實現

管理功能是在用戶權限設計的基礎上,增加一個管理功能:

1.所有管理功能的controller都在administrator目錄下創建。管理權限的第一次限制

Ruby代碼

Administrator::NewContollerName

2. 對於的功能將從生成的Controller下派生

Ruby代碼

 class Administrator::NewContollerName < AdminController

3. 相對應的試圖頁面在administrator目錄下 "views/administrator",

Ruby代碼

views/administrator/new_controller_name

4. 根據需要,在適當的時候,可以添加新的管理角色

5. 在管理頁面的controller最開始增加限制

Ruby代碼

     access_control :DEFAULT => 'ROLE NAME GOES HERE'

這將用於保證只有擁有管理角色的用戶才能訪問administrator目錄下的controller

6. 通過在管理界面的導航欄添加菜單,以便增加到新controller的連接。修改如下文件

Ruby代碼

 "views/admin/_navigation.html.erb"

則所有頁面導航的連接,將直接受到上一步我們設置的限制。

7.保證至少有一個用戶有控制和登錄管理界面的權限。不能刪除最後的管理用戶,否則系統將沒有管理功能。

日志系統設計

日志的功能通過類似數據采集系統的方式實現。在config/database.yml文件中,定義的獨立的數據庫,用來保持所有的日志信息。對Models的日志和對於用戶行為操作的記錄,被分為兩類數據表 dimension和facts。鑒於效率和數據大小的考慮,項目中數據庫沒有進行更多的授權訪問設置。在產品模式下,將會有嚴格的保護措施,以便不會誤刪數據。可是在開發模式,就有很多對應的開發和模擬數據方法,如下:

Ruby代碼

  rake logging:clear						           # Deletes all logging-related records. (特別注意: prodution 模式不能執行)
  rake logging:dimension:mock THOUSANDS=2	 # 創建 2,000 隨機模擬日志數據
  rake logging:geocode:all					       # Performs geocoding on the primary data, using caches where possible.
  rake logging:fact:all						         # Derives secondary data from primary data.

或者這時也可以通過一句命令實現以上操作

Ruby代碼

  script/runner script/logging_mock

項目同樣支持cron的定時操作,對特定時間區間進行日志操作,如下:

Ruby代碼

   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