Member Properties
會員搜尋
權限足夠的話,可以從網址 /Member 看到搜尋成員的畫面,搜尋條件有 login, email, fullname 三項,程式碼在 plone.app.users/browser/membersearch.py 由 MemberSearchForm 搭配 IMemberSearchSchema 來管理。
會員目錄和屬性值
會員的 Profile Field 被稱為屬性欄位,記錄 email 之類的屬性值,在 plone.app.user/browser/account.py 的 AccountPanelSchemaAdapter 和 AccountPanelForm prepareObjectTabs。
會員管理程式註冊在 @@usergroup-userprefs 可試 /@@usergroup-userprefs?searchstring=username 來搜尋特定帳號。
新增會員帳號是 @@new-user 必填欄位包括 E-mail, User Name, Password
取得 Full Name 的方法。
查詢所有會員的 wysiwyg_editor 設定值,批次指定 wysiwyg_editor 設定值。
預設會建立 /Member 目錄來顯示會員資料,想要取消目錄顯示的話,依照程度可以有多種方式。
Dynamic Group 可以依據條件指定群組,例如 email 資訊。
查詢 plone.app.users 程式碼可以找到會員資訊的運作細節。個人偏好 plone.app.users/plone/app/users/browser/personalpreferences.py
ZMI acl_users export zettwerk.users
會員使用專屬的 Skin 設定值: Traversal 要執行完畢才能決定會員資訊,自製函式要搭配 IPubAfterTraversal 才會有效。
使用自訂表單來建立會員: my folder action
from plone import api user = api.user.get_current() user.getProperty('location')
會員的設定值
以查詢編輯器的設定值為例:
# member_editor.py pm = app.Plone.portal_membership for memberId in pm.listMemberIds(): member = pm.getMemberById(memberId) editor = member.getProperty('wysiwyg_editor', None) print member, editor
$ cd ~/Plone/zinstance $ bin/plonectl run member_editor.py
# kupu2tinymce.py def Kupu2TinyMCE(self): pm = self.portal_membership for memberId in pm.listMemberIds(): member = pm.getMemberById(memberId) editor = member.getProperty('wysiwyg_editor', None) if editor == 'TinyMCE': print('%s: TinyMCE already seleted, pass.' % memberId) else: member.setMemberProperties({'wysiwyg_editor': 'TinyMCE'}) print('%s: TinyMCE has been set' % memberId) return from AccessControl.User import UnrestrictedUser from AccessControl.SecurityManagement import newSecurityManager admin = UnrestrictedUser('admin', '', ['Manager'], '') newSecurityManager(None, admin) portal = app.Plone from zope.site import hooks hooks.setSite(portal) Kupu2TinyMCE(portal) import transaction transaction.commit()
$ bin/plonectl run kupu2tinymce.py
Default Editor: No Value vs None
在 Default Editor 設定值裡,No Value 代表使用系統預設值,None 代表未使用視覺編輯器。
如果直接在 ZMI acl_users 刪除使用者,可能會造成 portal_memberdata 出現失連資料,必要時使用 Prune orphaned member records 來清除。
Notification When Users Join
http://stackoverflow.com/questions/5070055
Redirecting Authenticated Users to Their Home Directory
CMFPlone/skins/plone_login/login_next.cpy
home_url = membership_tool.getAuthenticatedMember().getHomeFolder().absolute_url() came_from = home_url
erId) editor = member.getProperty('wysiwyg_editor', None) if editor == 'TinyMCE': print('%s: TinyMCE already seleted, pass.' % memberId) else: member.setMemberProperties({'wysiwyg_editor': 'TinyMCE'}) print('%s: TinyMCE has been set' % memberId) return from AccessControl.User import UnrestrictedUser from AccessControl.SecurityManagement import newSecurityManager admin = UnrestrictedUser('admin', '', ['Manager'], '') newSecurityManager(None, admin) portal = app.Plone from zope.site import hooks hooks.setSite(portal) Kupu2TinyMCE(portal) import transaction transaction.commit()
Member Properties
移植會員資料密碼到 PHP 系統 SQL Relational Database
migration: wildcard.importexport
importing profile image to members personal portrait
Activate INavigationRoot Interface When Creating Member
AttributeError: acl_users - collective.select2
source="plone.principalsource.Users"
LDAP
啟用 plone.app.ldap 後,在 @@usergroup-userprefs 出現 IndexError。
OpenID
Members as Contents
在 Products.membrane 有定義 IMembraneUserObject 介面。
dexterity.membrane
David Glick 在 Net Impact 專案裡的實作經驗