2017-02-23 69 views
2

我有網站上註冊的用戶和使用外部帳戶(使用plone.app.ldap)登錄的用戶。Plone 4 - 獲得認證用戶的類型

如何獲取登錄用戶的類型?

membership = getToolByName(self.context, 'portal_membership') 
authenticated_user = membership.getAuthenticatedMember() 

(Pdb) authenticated_user 
<MemberData at /mywebsite/portal_memberdata/myuserid used for /mywebsite/acl_users> 

我已登錄用戶,但不知道如何找到它是如何註冊的。我的目標是將帳戶類型作爲自定義事件中的自定義維度發送給Google Analytics(分析),並創建一些漂亮的報告(其中包括:賬戶類型將成爲結果的過濾器)。

回答

3

的PAS服務的目標正是您的問題:-)

這就是所謂的可插入式身份驗證服務。這意味着您可以註冊多個服務,並且PAS爲您提供一個入口點來執行操作和查詢。 這意味着您通常不必關心用戶是plone用戶還是ldap用戶。

AFAIK唯一可能的方式就是直接詢問LDAP插件:

LDAP:廣告的ID/LDAP插件

的Plone:Plone站點

>>> membership = getToolByName(plone, 'portal_membership') 
>>> authenticated_user = membership.getAuthenticatedMember() 

>>> plone.acl_users.ldap.acl_users.searchUsers 
<bound method LDAPUserFolder.searchUsers of <LDAPUserFolder at /fd/acl_users/ldap/acl_users>> 

>>> search(uid=authenticated_user.getId()) 
[{'dn': 'cn=Test USER,ou=Users, ...', 'uid': 'test.user', 'sn': 'Test', 'mail': '[email protected]', 'givenName': 'USER', 'cn': 'Test User'}] 

搜索結果取決於您的廣告/ ldap配置。

+2

完美!謝謝。 :) 'search = plone.acl_users.get(「ldap-plugin」).acl_users.searchUsers'在我的情況。 – GhitaB

+0

Mathias的答案是正確的,但這個插件返回的IIRC用戶也會在道具中提供關於它的起源的信息。 不幸的是,這不是一個標準的行爲。 –

+0

我不知道這一點。這顯然是更好的選擇,因爲它不需要第二個可能的ldap請求。 – Mathias