PAS (Pluggable Authentication Service) 在 Plone 2.5 之後,成為會員管理的標準機制,在此之前使用的則是 User Folder,相同的是,這兩種機制都會在 ZMI 裡出現 acl_users 物件項目。由於 User Folder 架構擴充性不足,想要新增功能時,就得設計新的 User Folder,諸如 GRUF、LDAPUF、PUF 等,都是衍生產物,而且,更換 User Folder 並不是平順簡單的過程。
PAS 則是採取 plugin 方式來擴充功能,像是處理 role、authentication、identification、property 等資訊,具體的例子如 GMail Authentication 可以讓使用者以 GMail 帳號密碼來登入,或 NTLM Authentication 可以讓 Windows domain 裡的使用者自動登入,而整合 LDAP 或 Relational Database 也是常見的方式。
2008/12/30
2008/11/21
buildout with MinGW
在 Plone 下載網頁,看得到 Windows 版本的 builout installer 了。
與傳統 Windows installer 不同的地方,主要是目錄架構改變了,這倒容易習慣,但使用 buildout 時,經常會用到 C 編譯器環境,則需要花些工夫準備。
以 MinGW 為例,先下載 Automated MinGW Installer 安裝,例如裝在 C:\MinGW 目錄,到 C:\MinGW\libexec\gcc\mingw32\3.4.5 目錄把 cc1.exe 和 collect2.exe 複製到 C:\MinGW\bin 目錄,下載 libpython24.a 放到 C:\MinGW\lib 目錄,再把 C:\MinGW\bin 加到系統環境變數 PATH 裡。
在 shell 裡執行 gcc --version 測試是否成功。
接著要通知 Python 的 distutils 已可以使用 MinGW,以 Plone 安裝在 C:\Plone3 目錄為例,要到 C:\Plone3\python\Lib\distutiles 目錄裡建立 distutils.cfg 檔案,內容是
我有遇到 "missing structmember.h" 之類的訊息,處理方法是,下載 Python 原始碼檔案,複製 Include 目錄到 C:\Plone3\python\Include 目錄。
如果想要 Plone 以 Windows service 方式執行,可以先用 bin\instance install 指令,日後就可以直接使用 bin\instance start 或 stop 來啟動或關閉。
如果 Windows 使用防火牆,用 bin/instance fg 啟動後,系統會提示是否要打開 port。
其他更多的設定細節,可以參考 Using buildout on Windows 文件。
與傳統 Windows installer 不同的地方,主要是目錄架構改變了,這倒容易習慣,但使用 buildout 時,經常會用到 C 編譯器環境,則需要花些工夫準備。
以 MinGW 為例,先下載 Automated MinGW Installer 安裝,例如裝在 C:\MinGW 目錄,到 C:\MinGW\libexec\gcc\mingw32\3.4.5 目錄把 cc1.exe 和 collect2.exe 複製到 C:\MinGW\bin 目錄,下載 libpython24.a 放到 C:\MinGW\lib 目錄,再把 C:\MinGW\bin 加到系統環境變數 PATH 裡。
在 shell 裡執行 gcc --version 測試是否成功。
接著要通知 Python 的 distutils 已可以使用 MinGW,以 Plone 安裝在 C:\Plone3 目錄為例,要到 C:\Plone3\python\Lib\distutiles 目錄裡建立 distutils.cfg 檔案,內容是
[build]
compiler=mingw32
我有遇到 "missing structmember.h" 之類的訊息,處理方法是,下載 Python 原始碼檔案,複製 Include 目錄到 C:\Plone3\python\Include 目錄。
如果想要 Plone 以 Windows service 方式執行,可以先用 bin\instance install 指令,日後就可以直接使用 bin\instance start 或 stop 來啟動或關閉。
如果 Windows 使用防火牆,用 bin/instance fg 啟動後,系統會提示是否要打開 port。
其他更多的設定細節,可以參考 Using buildout on Windows 文件。
2008/11/04
Allowed Member ID in Plone
填寫 Plone 會員註冊表單時,會員名稱 (User Name) 預設不能使用空白或特殊符號,甚至第一個字元必須是英文字母,因此,像電郵信箱或整排數字,預設是不合法的會員名稱。
執行檢查的程式位於 CMFCore/RegistrationTool.py 檔案,原始碼片斷如下:
其中的 default_member_id_pattern 就是預設的合法名稱樣版,它使用 regular expression 格式,意思是說,開頭字元必須使用英文字母,接著的字元也必須是英文字母或數字或底線符號。
例如,想要限用電郵信箱當作會員名稱,可用的條件格式是 ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
關於使用電郵信箱當會員名稱的缺點,根據 Anton Stonor 表示,這容易導致隱私資料外漏,因為 template 裡大量用到 ID 資料。
執行檢查的程式位於 CMFCore/RegistrationTool.py 檔案,原始碼片斷如下:
class RegistrationTool(UniqueObject, SimpleItem):
""" Create and modify users by making calls to portal_membership.
"""
implements(IRegistrationTool)
__implements__ = (z2IRegistrationTool, )
id = 'portal_registration'
meta_type = 'CMF Registration Tool'
member_id_pattern = ''
default_member_id_pattern = "^[A-Za-z][A-Za-z0-9_]*$"
_ALLOWED_MEMBER_ID_PATTERN = re.compile(default_member_id_pattern)
其中的 default_member_id_pattern 就是預設的合法名稱樣版,它使用 regular expression 格式,意思是說,開頭字元必須使用英文字母,接著的字元也必須是英文字母或數字或底線符號。
例如,想要限用電郵信箱當作會員名稱,可用的條件格式是 ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
關於使用電郵信箱當會員名稱的缺點,根據 Anton Stonor 表示,這容易導致隱私資料外漏,因為 template 裡大量用到 ID 資料。
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." 我猜,它的意思是「檢查角色、使用者名稱、群組名稱,都應該盡量避免」吧。
首先,要有足夠的權限才能存取網站內容,不然,會遇到 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
也就是說,即使在 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 生效。

同樣在 ZMI 裡找 portal_javascripts 項目,把 Debug/development 選項打勾生效。

如果沒把 debug mode 生效的話,修改結果不會即時反應。
如果不想經常重新啟動 Zope,可以安裝 plone.reload,最簡單的方法,是在 buildout.cfg 裡的 egg 與 zcml 設定區塊,指定 plone.reload 模組,重新執行 buildout 並以 Manager 身份登入後,透過 http://localhost:8080/@@reload 之類的網址,就可以 Reload Code 或 Reload ZCML 了。
其次在 ZMI 裡找到 portal_css 項目,進入後在 CSS Registry 頁籤,會看到 Debug/development mode 選項,把它打勾,表示要讓 debug mode 生效。
同樣在 ZMI 裡找 portal_javascripts 項目,把 Debug/development 選項打勾生效。
如果沒把 debug mode 生效的話,修改結果不會即時反應。
如果不想經常重新啟動 Zope,可以安裝 plone.reload,最簡單的方法,是在 buildout.cfg 裡的 egg 與 zcml 設定區塊,指定 plone.reload 模組,重新執行 buildout 並以 Manager 身份登入後,透過 http://localhost:8080/@@reload 之類的網址,就可以 Reload Code 或 Reload ZCML 了。
Subscribe to:
Posts (Atom)