2008/10/16

VIM with Mandriva

在 Mandriva 上使用 VIM 遇過輸入中文,會產生亂碼的現象,例如輸入「中文」這兩個字,「中」是正常,但「文」就變成亂碼,原本都從修改 LC_* 或 TERM 環境變數下手處理,成效不彰。最近發現,出問題的主機都只裝 vim-minimal 而沒有 vim-enhanced 檔案,把 vim-enhanced 補上,就好了,特此一格。

2008/10/14

Security in Plone3

網站的安全機制 (security) 由 Zope 在系統底層負責,管理員和開發者應該了解「權限」「角色」「使用者」「群組」等概念,才能發揮安全機制帶來的便利。

首先,要有足夠的權限才能存取網站內容,不然,會遇到 AccessControl.Unauthorized 的訊息回應。權限 (permission) 並不是直接對應給使用者 (user),而是先被指定給角色 (role),再經角色指定給使用者。

一位使用者,可以被指定多種角色,生效範圍可以是全站性,或是只在特定目錄裡生效。角色也可以指定給群組 (group),如此一來,群組裡的使用者就具備被指定的角色。


在 ZMI 裡 Security 頁籤,可以看到整個系統的「安全列表」,多數權限項目的「Acquire permission settings?」選項是打勾狀態,表示「會繼承上一層目錄的權限結果」,在此情況下,角色設定的效果會再加上去。

一般情況下,並不需要去更改安全列表的設定狀況,即使需要調整,也應該只更改網站根目錄的設定值。除此之外的情況,都會讓整個安全機制變得很複雜。

權限是安全機制裡的最小單位,網站應用軟體如果用到安全機制,通常是要檢查權限,而不是檢查角色。檢查使用者或群組名稱,通常不是好主意。

Professional Plone Development 書中第 83 頁,提到 "Security-aware code should almost always check for permissions, rather than roles. Checking for specific user or group names is rarely a good idea, because roles can change depending on the current context and security policy of the site." 我猜,它的意思是「檢查角色、使用者名稱、群組名稱,都應該盡量避免」吧。

2008/10/12

My Folder in Plone3

在 Plone3 之前,登入會員帳號後,可以在 personal bar 看到 my folder 的連結項目,但在 Plone3 之後,已取消這樣的呈現方式。

也就是說,即使在 Site Setup 裡 Security 選項,把 Enable User Folders 打勾生效,僅管登入會員帳號後,可用 /Members/myuser 之類的網址找到 myuser 使用者的個人目錄,但在 personal bar 還是找不到 my folder 的連結項目。
如果想要「恢復」原本的呈現效果,可到 ZMI 設定,進入 portal_actions 裡會看到 user 或 portal_tabs 之類的 CMF Action Category 項目,再新增一個 CMF Action 項目 ID 可指定為 myfolder,Title 指定為 My Folder,I18n Domain 指定為 plone,URL (Expression) 指定為 string:${portal/portal_membership/getHomeUrl},Condition (Expression) 指定為 python:(member is not None) and (portal.portal_membership.getHomeFolder() is not None),Permissions 指定為 View,將 Visible 打勾,最後按 Save Changes 確認。
這樣就會在 personal bar 看到 My Folder,但如果想要調整它呈現的位置順序,例如在 Log out 之前,可以利用 Up / Down 按鈕來調整。
詳細的說明可參考 http://dev.plone.org/plone/ticket/7075

2008/10/03

Plone Debug Mode

首先,要找到 etc 目錄裡的 zope.conf 檔案,確認設定值是 debug-mode on 的狀態。如果前面有「#」符號,表示是「註解」之意,要移掉「#」符號。

其次在 ZMI 裡找到 portal_css 項目,進入後在 CSS Registry 頁籤,會看到 Debug/development mode 選項,把它打勾,表示要讓 debug mode 生效。
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxMa9weziPIEYh6PyQI1OOLHsFssVFHa0HjwPvgG7zllBG6ADnuafYs6sZ6SNxuYWUhlCxsOOqDgBHFvPJnDWezho6AILfZaTqKNWorx_QcxhNOC74iyc3N99U7n9OVA0QhzI3CQcd0HyV/s800/portal_css-debug.png

同樣在 ZMI 裡找 portal_javascripts 項目,把 Debug/development 選項打勾生效。
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvt7l3ibLUSc_DRj7bkJTV9wfwonU9Rwzhx0fuxSTFXZLcBoG81Da7RBSUxS1UymXpmqz16Sa3QHQZnXkew18-gqCEUMJ1YBYlZepCL3kIMDrql-BXZQuo6SU3Ss5z8jTauAYaI4jWyifp/s800/portal_js-debug.png

如果沒把 debug mode 生效的話,修改結果不會即時反應。

如果不想經常重新啟動 Zope,可以安裝 plone.reload,最簡單的方法,是在 buildout.cfg 裡的 egg 與 zcml 設定區塊,指定 plone.reload 模組,重新執行 buildout 並以 Manager 身份登入後,透過 http://localhost:8080/@@reload 之類的網址,就可以 Reload Code 或 Reload ZCML 了。
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiK0OKuHp-4lMjK1RDRafbwzNF_CotMkp-lu2SnDrkSxXIfpG51R7h5eFDjM2rS29PRGOUtYLZpJsXKZsefv5yqA3ggz441l99FMGr-SH7qirnFFxwtYxoMkkq5Zs9V-fT1JWdXwyGgZdd/s800/plone-reload-action.png