plone进行 用户和权限管理
=================
用戶和權限管理
=================
.. Contents::
.. sectnum::
?? :prefix: 6.
對于任何一個系統,我們都會關心它的安全性問題。我們需要控制不同的用戶,在網站的不同地方,在不同的階段,能夠擁有不同的權限。Plone具有一個強大的、柔性、精細粒度的安全性模式,可針對每個對象,為用戶、組分配權限,支持委托授權。
本章首先穿插介紹所有相關的概念術語,及Plone中怎樣管理用戶和設置權限;同時深入Zope的權限介紹,并對管理用戶的文件夾及相關作用做詳細介紹;包括原理、及與其它服務集成,如LDAP(Lightweight Directory Access Protocol: 輕量級目錄訪問協議)集成,關系數據庫用戶集成等。
本章適合網站管理員、系統管理員、系統集成人員閱讀。本章學習重點:
- 管理用戶的概念
- 在Plone控制面板中管理用戶和組
- Plone權限設置
- 深入權限管理
- 認識ZMI中的用戶管理文件夾
- 與第三方認證集成
?
管理用戶
===================
用戶、角色和組
----------------------
在Plone中,用戶(Users)、角色(Roles)和組(Groups)屬于非常重要的概念,這里先對它們詳細地介紹。
用戶
.............
每個訪問Plone站點的人,都被稱為 用戶(User) ,不管是否可以通過Plone認證。那些不能通過認證的用戶被稱為 匿名用戶(anonymouse users) 。匿名用戶屬于最 低 等級的用戶,系統對他們有最多的限制。一旦用戶登入系統,就會獲得賬戶賦予的角色身份。一個用戶是由其用戶名唯一識別的,例如 joy 。
角色
........
Plone站點擁有一組角色,角色是權限的集合。一般有系統集成人員在ZMI中預先定義每個角色擁有的權限,而Plone中不提供角色的設置界面。可以同時分配多個角色給一個用戶,例如,一個用戶可以是成員和管理員。每個角色也具有唯一的標識,如成員(Member)。
Plone有6個預設的角色,可以分為兩種:可分配角色和不可分配角色。
不可分配的角色有:
- 匿名用戶(Anonymous):指那些沒有登錄到系統中的用戶,他們可能沒有系統賬戶、或者有系統賬戶但只是沒有登錄。
- 認證用戶(Authenticated):指所有已經登錄到系統中的用戶,不管他是什么角色。一個用戶不是匿名用戶就是認證用戶,這兩種角色是互斥的。因為認證用戶這種角色并不能在在用戶分類上提供更多幫助,所以不推薦使用。
可分配的角色有:
- 所有者(Owner):如果用戶創建一個內容對象后,即自動成為該內容的所有者。對被創建的內容對象而言,該角色只會賦予一個用戶(創建它的用戶),其所有者信息被保存在這個內容對象本身。該角色的分配并不是顯式操作的結果,而是Plone自動完成的。
- 成員(Members):對于注冊到Plone站點的用戶而言,缺省即為成員角色。只要通過Plone界面中的【注冊】鏈接方式加入的用戶,都會具有該角色。
- 審批人(Reviewer):該角色用戶擁有的權限比成員角色更多、但比管理員角色要少。審批者用戶可以編輯或審批由成員角色提交的內容;他們不可以修改系統配置或設置用戶賬戶信息(這是管理員用戶做的事情)。
- 管理員(Manager):管理員可以做任何事情,所以該角色只能賦予那些可信賴的開發人員或系統管理員。一個管理員用戶可以刪除、編輯內容對象,清除用戶賬戶,改變系統配置,甚至刪除整個Plone站點。所以一定要謹慎使用該角色!
??
Plone 3.0 引入了兩個新的角色:
- 查看人(Reader):查看人可以查看所有狀態的內容,并具有訪問內容信息(Access content information)和查看文件夾列表(List folder contents)權限。
- 編輯人(Editor):編輯人具有編輯(Modify portal content)站點內容的權限。
用戶組
.........
組是用戶的一個集合,組是用戶的邏輯分類。例如,市場部的用戶可以劃分為一個組,而工程部的用戶又可以劃分為另外一個組。每個用戶可以不屬于任何組、也可以屬于多個組。
Plone控制面板中管理用戶和組
-------------------------------
在《使用Plone》的章節中介紹Plone控制面板的時候,Plone控制面板中提供了用戶和組管理。下面來介紹在Plone控制面板中管理用戶和組。
用戶管理
..............
以網站管理員角色進入網站設置,然后進入這個用戶和組管理頁面如圖6.1,這個設置頁面分為兩個標簽頁,分別設置用戶和組。
.. figure:: img/security/prefs_users_overview.jpg
?? :alt: 用戶和組管理
?? 圖 6.1 用戶和組管理的用戶標簽頁
在用戶標簽頁中網站管理員可以通過【添加新用戶】按鈕添加新的用戶。在下面的表格中可查找用戶,單擊【全部顯示】顯示所有用戶。點擊某個用戶名,如zopen,可查看和修改這個用戶的詳細信息,包括所屬的用戶組。點擊信封圖標可給他發送郵件,可以編輯郵件地址,可變更用戶角色,可刪除用戶,還可重置用戶的密碼(會自動發送通知郵件)。
.. hint::
?? 并不是所有的用戶數據源都支持【全部顯示】功能,比如通過LDAP等連接的用戶就不能顯示。
組管理
...........
組標簽頁如圖6.2所示。
.. figure:: img/security/prefs_groups_overview.png
?? :alt: 用戶和組管理
?? 圖 6.2 用戶和組管理的組標簽頁
這個界面很類似于成員管理的界面。在這里可以添加新的組。在表格中可搜索指定的組名。這里的組默認是全部(分頁)顯示的,可變更組的角色,還可刪除組。點擊某個組名,如Administrators,可添加組員和修改組屬性,如圖6.3是進入到Administrators,搜索zopen用戶,將其加入到Administratros組。
.. figure:: img/security/prefs_group_members.png
?? :alt: 用戶和組管理
?? 圖 6.3 用戶和組管理--添加用戶到組中
圖6.3中的組成員的頁面中顯示Administrators組的當前組成員,組成員可以是組也可以是用戶,在當前組成員的表格中可以刪除某一組/用戶。在下面搜索新組員的表格中,可搜索到某一用戶/組或全部顯示,選中添加到Administrators組中。在這個頁面的組屬性標簽頁中可設置Administrators組的相關屬性。
返回到組管理的頁面,即圖6.2所示。可看到這個頁面中有角色管理的介紹,也清晰地描述了角色的概念,在上文中也有定義。可以添加新的角色,而這是一個開發工作,需要到Zope管理界面中去完成,下文中會詳細介紹。
Plone權限設置
================
在Plone中設置內容的權限一般有三種方式:第一,針對用戶/用戶組設置系統角色;第二,針對內容設置內容共享;第三,設置內容為保密或發布狀態。
第一種方式,針對用戶/用戶組設置系統角色,在上文中介紹通過Plone控制面板管理用戶和用戶組的時候已經了解到。
為用戶分配的系統角色,將在整個網站在所有的內容上都有效。下面介紹設置權限的另外兩種方式。
設置內容共享
----------------
在《使用Plone》的章節中,了解了一些內容標簽,在這里介紹設置內容的【共享】標簽。
Plone中的所有內容都可以設置共享,可對單個文件也可以對整個文件夾,由內容的所有者或站點管理員可在【共享】標簽頁中操作完成。
在【共享】標簽中可為用戶或者組分配本地角色。和前面的系統角色不同,本地角色僅僅在所在內容或者文件夾下才有效。
默認情況下,在文件夾上的本地角色設置,文件夾中的內容會自動獲取;也就是說文件夾中的內容,可繼承父文件夾中的本地角色設置。
因此,一般是對文件夾設置共享,而不必單獨為文件夾中的每個內容設置。圖6.4所示是進入stuff文件夾的共享標簽頁看到的當前共享權限。
.. figure:: img/security/folder_localrole.png
?? :alt: 設置共享權限
?? 圖 6.4 設置共享權限--stuff文件夾當前的共享權限
圖中顯示plonespace用戶是此內容的所有者,而admin繼承的所有者角色。在這個界面中可以對用戶/組分配角色,同時也可以刪除已存在的角色和用戶/組。
給用戶設置共享權限
.....................
在共享標簽頁的當前共享權限以下,可看到給用戶授權的界面,如圖6.5所示。
.. figure:: img/security/folder_localrole_user.png
?? :alt: 設置共享權限
?? 圖 6.5 設置共享權限--給用戶授權(1)
通過多種搜索方式,如:用戶登錄名,郵件地址,或所在的組名來搜索用戶。執行搜索后,此部分界面變成了下圖6.6所示。
.. figure:: img/security/folder_localrole_adduser.png
?? :alt: 設置共享權限
?? 圖 6.6 設置共享權限--給用戶授權(2)
搜索結果中顯示搜索到的內容,如果有多個也會同時顯示多個,選中需分配的用戶(圖中是spring的用戶),選擇要分配的角色(圖中分配為管理員),單擊為【所選用戶分配本地角色】即可。執行后,再看看當前的共享權限,如圖6.7所示。
.. figure:: img/security/folder_localrole1.png
?? :alt: 設置共享權限
?? 圖 6.7 查看當前的共享權限
看到設置后在當前的共享權限的表格中多了spring用戶的信息,他是此內容(stuff文件夾)本地角色的管理員。spring用戶是通過授權成為stuff文件夾的管理員,默認情況,spring用戶也自動獲取了stuff文件夾子文件的管理員權限。
給組設置共享權限
...................
為方便管理,一般成組設置角色。這樣,只需要將用戶加入到某個組,便可自動得到為組所分配的權限。
再看看給組添加共享權限的界面,如圖6.8所示。
.. figure:: img/security/folder_localrole_group.png
?? :alt: 設置共享權限
?? 圖 6.8 設置共享權限--給組授權(1)
給出搜索條件,執行搜索后,此部分界面變成了下圖6.9所示。
.. figure:: img/security/folder_localrole_addgroup.png
?? :alt: 設置共享權限
?? 圖 6.9 設置共享權限--給組授權(2)
也同樣,搜索結果中顯示搜索到的內容,如果有多個也會同時顯示多個,選中需分配的組(圖中是group1的組),選擇要分配的角色(圖中分配為管理員),單擊【為所選組分配本地角色】即可。執行后,再看看當前的共享權限,如圖6.10所示。
.. figure:: img/security/folder_localrole2.png
?? :alt: 設置共享權限
?? 圖 6.10 查看當前的共享權限
可看到設置后在當前的共享權限的表格中多了group1的信息,他的類型是組,他是此內容(stuff文件夾)本地角色的管理員。group1組也是通過授權獲得stuff文件夾的管理員權限,同時也自動獲取了stuff文件夾子文件的管理員權限。
添加組的共享權限就非常的方便,而且也是經常處理的工作,比如,我們需要這個部門的用戶都能管理某一個文件夾,也正好之前將這個部門的所有用戶分配到建立的某個組,那么只需要通過給這個組設置共享管理員的權限即可。
高級設置
.............
前面了解到某一內容都有可能有從上一級目錄繼承的角色。那么是否可以去除這個繼承關系呢?是可以的。現在以文件夾中的某一內容為例,這樣更能清楚地看到從上一級繼承的角色。進入stuff文件夾的document頁面的的共享標簽頁的底部,可看到如圖6.11所示。
.. figure:: img/security/folder_localrole_more.png
?? :alt: 設置共享權限
?? 圖 6.11 設置共享權限--高級設置
如果是站點管理員所看到的就還有更改所有者的的部分。做為此內容的所有者看到此頁面是沒有更改所有者的部分。
去掉【從上層文件夾繼承角色】的選項(默認是選擇的),單擊【應用設置項】后,可以看到此內容的當前共享權限,如圖6.12中。
.. figure:: img/security/folder_localrole3.png
?? :alt: 設置共享權限
?? 圖 6.12 查看當前的共享權限
圖中可看到從上一級目錄,即stuff文件夾繼承角色的用戶/組都變成灰色了。他們已經不是document頁面的某些角色,也不再擁有document頁面的相關權限。
站點管理員用戶可以更改內容的屬主,每個內容有唯一的所有者,管理員可在更改所有者的部分按提示操作。這個設置不常用到,設置也比較簡單,這里就不多介紹了。
Plone 3.0中設置內容共享
.........................
上文中介紹的設置內容共享,設置過程還較復雜,較繁瑣。一個設置內容共享的頁面分成幾個區域,導致共享的標簽頁很長,上文介紹的時候也不得不分成幾個板塊來分別介紹。下圖6.13是Plone 3.0中設置內容共享的頁面截圖,Plone 3.0大大簡化了權限的設置步驟。
.. figure:: img/security/plone30_share.png
?? :alt: plone30_share
?? 圖 6.13 Plone 3.0中設置內容共享
Plone 3.0設置內容共享的頁面只用了一個搜索用戶/組板塊來設置本地角色,但同時多了編輯人,查看人的角色(上文中已介紹)。??
調整內容的狀態
-----------------------
調整文件夾的狀態,比如保密、公開草案、發布等,這樣可以設置文件夾下內容的保密級別。比如將文件夾設置為保密后,文件夾及文件夾下內容對除所有者和管理員的角色外所有的用戶就沒有顯示的權限。當然直接對普通內容(文件,頁面,圖片等)也可單獨設置內容狀態。
.. figure:: img/security/content_status.png
?? :alt: 內容狀態
?? 圖 6.14 調整內容的狀態
可查看《管理工作流》章節中的工作流權限明細表,據不同的要求調整內容狀態,這個比較簡單,在《使用Plone》的章節中也有部分介紹,這里就不過多介紹了。
深入權限管理
===================
Plone提供了一個用戶友好的權限設置界面,已經可以實現日常管理的權限設置。但您可能需要更多,更深入地了解Plone的權限,比如想了解是什么控制內容可查看,可編輯等,這需要您了解Zope的權限。Zope的權限非常細,也較為復雜,所以可進行更加精細的權限調整。實際當中,也并不需要了解這些細而復雜的權限,下面會介紹常用的權限設置。同時會介紹在Zope管理界面中如何添加新的角色,以及一些日常管理工作。
了解Zope的權限
---------------
在《深入Plone設置與管理》章節中介紹ZMI,當時了解了ZMI中每個對象都有一個Security標簽頁,即對象安全標簽頁。圖 6.15所示是站點ZMI根目錄的Security標簽頁的截圖片斷。
.. figure:: img/security/security.png
?? :alt: security
?? 圖 6.15 對象的安全標簽頁
圖中看到這個頁面的表單左側列出的權限項(Permission)很多很多,這些是站點獲得Zope的,以及Plone的,還有Plone的一些插件產品幾乎所有的權限項。這些是幾乎接近底層的東西,沒有必要一個個去了解它們。在表單的右側列出的是針對每一個權限項各個角色(Roles)是否擁有這個權限項的權限,這些角色正是上文中羅列的Plone站點中預設的6種角色(Anonymous, Authenticated, Manager, Owener, Reviewer)。
在每一個權限項的左側,都有一個選擇設定獲取(Acquire permission settings?)的選擇框,表示自動從對象上一級目錄獲取權限設置。
因為這個獲取的存在,一般情況下,只需要在網站根文件夾下設置權限即可,下面的各級子文件夾中的內容都可自動獲取根文件夾中的設置。
這樣大大簡化的網站的權限設置。
常用權限設置
-------------------
前面看到了ZMI中的Security標簽頁中的權限項太多,一般不推薦到這里來設置權限,這里介紹幾個常用的權限。
.. csv-table:: 【表 6.1】 Plone的常用權限
?? :header: "權限", "權限說明"??
?? "View", "查看具體內容的權限"
?? "Add portal content", "添加內容的權限"
?? "List folder contents", "列舉文件夾內容清單的權限"
?? "Delete objects", "刪除內容的權限"
?? "Modify portal content", "編輯內容的權限"
?? "Add portal member", "注冊到網站的權限"
?? "Reply to item", "評注的權限"
添加角色
-------------
在上文中介紹用戶與組管理時提到可以添加角色,就是在Security標簽頁的最下方,如圖6.16。
.. figure:: img/security/add_roles.png
?? :alt: add_roles
?? 圖 6.16 添加角色
圖6.16中是站點根目錄的Security標簽頁下方的添加角色,所以你看到在這里可以刪除成員和審批人的角色。在這里可以添加角色和刪除角色。
添加角色屬于系統集成人員才會執行的操作,添加角色后往往還要為該角色關聯相關的權限。比如可定義一個貢獻人角色,然后在Security標簽中,和這個將Add portal content的權限項和這個角色關聯。這樣,便可以在Plone共享標簽中,通過為文件夾中的用戶或組分配這個新的貢獻人角色,來授予添加內容的權限。
日常權限管理工作
-------------------
說到Plone中的權限管理,不可能不提及到工作流。在上文中的Plone權限設置中,提到三種方式設置內容的權限,有一種就是調整內容狀態,這其實是工作流所控制的。調整狀態,可以批量的調整角色的權限。比如內容一旦發布,原始作者便不能再修改了。所以在Plone權限管理中是和工作流密切相關的,關于工作流具體會在下一章《定制工作流》中詳細介紹。
Plone中的某些權限項,比如,內容的查看,編輯等權限,是由工作流所控制的。其他的權限設置,比如添加內容的權限項,用戶注冊的權限項,用戶評注的權限項等,可以單獨設置。
下面是日常權限管理工作中幾個常用到的例子,通過例子的操作更深入地了解和掌握復雜一點的權限管理工作。
禁止用戶自行注冊
......................
禁止用戶自行注冊也是很多案例需要去設置的,比如,建立企業的內部站點,建立私人站點,就常有這樣的需求。下面是設置禁止用戶自行注冊的實例。
【例 6.1】 設置禁止用戶自行注冊
#. 進入站點ZMI根目錄的Security標簽
#. 找到Add portal member權限項,取消選擇Acquire(獲取)復選框,并選擇允許Manager和Owner角色的復選框
#. 單擊Save按鈕,保存更改
這樣就設置了站點禁止用戶自行注冊的功能,當您用匿名用戶查看站點時,注冊的鏈接已經沒有了,匿名用戶不能注冊站點成員了,如圖6.17所示。當然,管理員可以在Plone控制面板中添加站點成員,這也正是我們需要達到的目的。
.. figure:: img/security/no_join.png
? 圖 6.17 設置禁止用戶自行注冊
允許成員添加內容
...................
很多站點會有這樣一個需要,它們開放某一個目錄,在這里站點成員都可以添加內容(或某一類型內容)。下面是設置某一文件夾下允許成員添加內容的實例。
【例 6.2】 設置某一文件夾下允許成員添加內容
#. 進入ZMI中的stuff文件夾(這里以stuff文件夾為例)的Security標簽頁
#. 找到Add portal content權限項,取消選擇Acquire,并選擇允許 Manager 、Member 和 Owner 角色
#. 找到您想讓成員添加的內容類型的權限項,比如,添加文件內容(ATContentTypes: Add File)的權限項,取消選擇Acquire,并選擇允許 Manager 、Member 和 Owner 角色
#. 單擊Save按鈕,保存更改
這樣,站點成員就可以在stuff文件夾下加您允許添加的文件類型內容。下圖 6.18 是成員用戶登錄到stuff文件夾后有添加文件的權限。
.. figure:: img/security/add_file.png
?
? 圖 6.18 允許成員添加內容
允許匿名用戶評論
....................
默認的Plone站點對用戶登錄才能對內容發表評論,下面是設置允許匿名用戶發表評論的實例。
【例 6.3】 設置允許匿名用戶評論
#. 進入ZMI的根目錄的 Security 標簽頁
#. 找到Reply to item權限項,取消選擇Acquire,并選擇允許Anonymous角色
#. 單擊Save按鈕,保存更改
這樣,站點的內容如果開啟了評論,匿名用戶也可對內容進行評論。如下圖是匿名用戶可添加評注,默認情況內容開啟評論后,圖中紅圈位置是【登錄后發表評論】的按鈕。
.. figure:: img/security/add_comment.png
?? 圖 6.19 允許匿名用戶評論
??
用戶管理文件夾
======================
在Plone控制面板中可以對用戶和組的管理,那么Plone站點用戶在內部是如何存儲、管理、認證的呢?下面就來介紹Plone的用戶管理文件夾。
有的Plone網站需要與其它系統的用戶數據集成,他們根本不想把用戶放在Plone默認存儲的數據庫中,比如希望讓Plone站點與LDAP集成,與關系數據庫用戶集成等,Plone的用戶管理文件夾可以實現這些。
認識用戶管理文件夾
----------------------
進入站點的ZMI中,看到有一個acl_users的對象,如圖6.20所示,Plone就是通過這個稱之為用戶管理文件夾的工具來存儲和管理用戶賬號的。
.. figure:: img/security/acl_users.png
?? :alt: acl_users
?? 圖 6.20 用戶管理文件夾
用戶管理文件夾原理
--------------------
從Plone 2.5開始,Plone開始引入PlonePAS來進行用戶管理。 PlonePAS 是一個全插件架構的用戶文件夾,擁有大量的插件,能夠靈活的設置認證、用戶管理、用戶屬性管理、組管理、角色管理等各個環節,并可輕松擴展,滿足個性化的用戶管理需要。
使用相關的插件,可實現Plone和第三方的用戶數據源的集成,實現多數據員認證,支持用戶組的管理,也可在多個Plone站點之間共享數據源。
PlonePAS底層采用Zope上的一個叫做PluggableAuthService的產品實現。
acl_users中除Plugins,其他對象都是用戶管理文件夾都是插件,這些插件按不同類型的插件分類組成在用戶管理文件夾,以下是這些插件簡單說明。
.. csv-table:: 【表 6.2】? acl_users 工具中的對象
?? :header: "對象", "用處"
?? "chooser", "選擇對通過瀏覽器,FTP,WebDAV,及 XML-RPC(XML-RPC 是一套規范及其一系列的實現,允許運行在不同操作系統、不同環境的程序基于internet進行遠程過程調用。)訪問協議映射"
?? "credentials_basic_auth", "設置通過HTTP認證的接口"
?? "credentials_cookie_auth", "設置通過cookie認證的接口"
?? "local_roles", "設置管理本地角色的接口"
?? "mutable_properties", "設置管理存儲在ZODB(Plone默認存儲的數據庫)中的用戶屬性"
?? "portal_role_manager", "站點角色管理"
?? "sniffer", "設置管理請求相關的接口"
?? "source_groups", "站點組管理,存放在Plone默認數據庫中的組"
?? "source_users", "站點成員管理,存放在Plone默認數據庫中的用戶"
?? "user_factory", "設置Plone用戶工廠接口"
PlonePAS用戶文件夾的核心對象是plugins對象,它是所有插件的一個注冊表。在acl_users文件夾中,進入plugins對象,這是查看插件的管理器,在插件管理器中,可以查看各種的注冊清單。plugins對象的Active標簽頁對插件清單做了分類。如圖6.21(為了更容易理解這部分內容,下面是加了一個ldap_users插件的截圖)。
.. figure:: img/security/acl_users_plugins.png
?? :alt: acl_users_plugins
?? 圖 6.21 注冊插件清單表
正如前面所介紹的,所有的插件是按不同類型的插件分類組成在用戶管理文件夾,下表6.3是插件分類說明。
.. csv-table:: 【表 6.3】插件分類說明
?? :header: "插件", "說明"
?? "Anonymoususerfactory Plugins", "創建匿名用戶插件"
?? "Authentication Plugins", "認證插件,依賴提供的用戶數據外部認證插件"
?? "Challenge Plugins", "考查插件,用戶信息認證時向用戶發起考查"
?? "Challenge_Protocol_Chooser Plugins", "協議選擇器考查插件,它指定用戶請求各種協議的認證;比如指定FTP,WebDav使用HTTP協議認證。"
?? "Reset Credentials Plugins", "清除認證信息插件,響應用戶的登出"
?? "Update Credentials Plugins", "更新認證信息插件,響應用戶更改認證信息"
?? "Extraction Plugins", "萃取插件,從請求中提取可靠的認證信息"
?? "Group_Enumeration Plugins", "用戶組枚舉插件,允許通過ID查詢組"
?? "Group_Introspection Plugins", "組自省插件,提供組和用戶的列表"
?? "Group_Management Plugins", "用戶組管理插件,提供對組進行增、改、刪和成員管理"
?? "Groups Plugins", "組插件,確定用戶屬于哪個組"
?? "Local_Roles Plugins", "本地角色插件,為本地角色定義了一些策略"
?? "Properties Plugins", "屬性插件,可產生用戶一些信息"
?? "Request_Type_Sniffer Plugins", "請求類型嗅探器插件,探測一個引入請求的類型"
?? "Role_Assigner Plugins", "角色分配插件,允許PAS分配角色到相關人員"
?? "Role_Enumeration Plugins", "角色枚舉插件,允許通過ID查詢角色"
?? "Roles Plugins", "角色插件,確定一個用戶擁有的全局角色"
?? "Update Plugins", "更新插件,允許用戶或應用程序更新用戶屬性"
?? "User_Adder Plugins", "增加用戶插件,允許PAS創建用戶"
?? "User_Enumeration Plugins", "用戶枚舉插件,允許通過ID查詢用戶,或搜索相匹配的詳細信息"?
?? "Userfactory Plugins", "創建用戶"
?? "User_Introspection Plugins", "用戶自省插件,允許PAS提供用戶的列表"
?? "User_Management Plugins", "用戶管理插件,允許PAS增、刪、修改用戶"
?? "Validation Plugins", "確認插件,指定允許用戶的屬性值"
在這里很方便地看到各個插件的類型,同種功能插件的使用順序,及可用到的插件等。
比如在上圖中,同屬于Authentication Plugins的插件有ldap_users和source_users,同屬于Challenge Plugins的插件有credentials_cookie_auth和credentials_basic_auth。插件使用順序在設置上也很重要,比如上圖中的Authentication Plugins(認證插件),用戶認證先使用ldap_users數據源,如果在這個數據源中沒找到再到下一個source_users數據源中找。同樣,你可以設置改變順序,進入Authentication Plugins,如圖6.22所示。
.. figure:: img/security/plugins_change.png
?? :alt: plugins_change
?? 圖 6.22 改變同功能的插件使用順序
在這里可以調整Authentication Plugins的兩個插件ldap_users和source_users的使用優先級。如果不需要用到source_users數據源,將source_users從Active Plugins(當前活動的插件)移到Available Plugins(可用到的插件)區。這樣就做到了只使用ldap_users數據源了。
在用戶數據認證,有時候需要滿足這樣的要求:某個Plone站點之前使用的是存放在默認Plone數據庫中的用戶數據源source_users,現在想使用用戶數據更全的LDAP數據源認證,并且以后從網站注冊的用戶都存放在LDAP數據源中,Plone原來的用戶數據源source_users只提供用戶數據認證。這樣實現其實很簡單,在source_users的Activate標簽頁中設置一下接口就行,只允許提供用戶認證接口,如圖6.23所示。
.. figure:: img/security/source_users.png
?? :alt: source_users
?? 圖 6.23 設置source_users數據源中的接口
所以在這里也了解到,要實現多個用戶數據源的認證,首先要添加多個用戶數據源,如上圖6.16中添加了一個ldap_users的數據源,然后要設置認證的順序,還需設置各個數據源中的認證的接口,根據具體的需求設置實現多個數據源認證。另外,實現數據源認證一般需要設置緩存加速,進入數據源ldap_users的Cache標簽頁設置緩存。
第三方認證集成
================
LDAP集成
--------------
首先,確認已經建立好LDAP服務器,或某些使用LDAP協議(Lightweight Directory Access Protocol: 輕量級目錄訪問協議)的服務器,比如活動目錄。下面的例子只介紹如何在Plone中與LDAP服務器集成。
與LDAP服務器集成需要安裝以下幾個產品擴展包:
- SimpleUserFolder:Zope的擴展包,將用戶名和口令存放在Plone默認的數據庫中,這個產品沒有支持組的功能。
- LDAPUserFolder:Plone的擴展包,這個產品對Zope的用戶文件夾重新定義,讓Plone用戶存儲與LDAP服務器集成。如:活動目錄、OpenLDAP。
- LDAPMultiPlugins:Plone的擴展包,這個產品提供PAS使用LDAP的插件。
這些都是Zope/Plone的產品,按照傳統的安裝方式將產品放到Plone實例的Products目錄,重啟服務即可,在ZMI的acl_users中可以看到可以添加ldap_multi_plugin插件,如圖6.24。
.. figure:: img/security/ldap_multi_plugin.png
?? :alt: ldap_multi_plugin
?? 圖 6.24 提供集成LDAP的插件
在添加列表中有 ldap_multi_plugin ,現在添加這個插件,出現了配置LDAP的頁面,如圖6.25所示。
.. figure:: img/security/ldap_users.png
?? :alt: ldap_users
?? 圖 6.25 配置LDAP
??
連接LDAP服務器,配置上圖表單中的配置項,下表6.4中對配置LDAP的配置項做了具體說明。
.. csv-table:: 【表 6.4】 LDAP配置項說明
?? :header: "配置項", "說明"
??
?? "LDAP Server[:port]", "連接LDAP服務器"
?? "Login Name Attribute", "用戶的登錄名,使用LDAP中匹配的字段"
?? "User ID Attribute", "用于唯一認證用戶的字段"
?? "RDN Attribtues", "LDAP中的節點標識字段"
?? "Users Base DN", "用戶對應在LDAP服務器中的DN"
?? "Group storage", "組是否存放在LDAP服務器中"
?? "Group mapping", "組的映射方式"
?? "Group Base DN", "組對應在LDAP服務器中的DN"
?? "Manager DN", "管理人員對應在LDAP服務器中的DN"
?? "User object classes", "用戶的LDAP類型(用于在LDAP服務器中創建用戶)"
?? "User password encryption", "口令加密的方式"
?? "Default User Roles", "登錄后在Plone站點中將自動獲得一個默認的系統角色"
這些配置項由LDAP服務器的管理員提供,配置好后,單擊Apply Changes提交更改,這樣就對配置集成LDAP服務器就完成了。配置表單存放在ldap_users 的Content標簽頁下的acl_users文件夾,可看到LDAP服務器已經連接上,如圖6.26所示。
.. figure:: img/security/ldap_connect.png
?
?? 【圖 6.26】連接LDAP服務器
下面需要設置已經配置好LDAP數據源的接口,返回acl_user目錄,進入ldap_users,設置它提供的接口。如圖6.27所示。
.. figure:: img/security/ldap_functionality.png
?? :alt: ldap_functionality
?? 圖 6.27 設置LDAP數據源的接口
根據需求設置好接口后,單擊Update按鈕完成更改。
還需對認證LDAP數據源設置緩存加速。(關于這一步,LDAPMultiPlugins產品中的README.txt中寫得很清楚,安裝產品前看README是一個很好的習慣。)返回到acl_users目錄,在下拉菜單中添加"RAM Cache Manager",填入緩存設置的ID(例子中設置為auth_cache)配置緩存項,如圖6.28所示。
.. figure:: img/security/auth_cache.png
?? :alt: auth_cache
?? 圖 6.28 配置緩存項
按照您的具體需要配置好后,單擊Save Changes按鈕,保存更改。返回acl_users目錄,進入ldap_users的Cache標簽頁,設置ldap_users數據源的緩存使用的對象,即前面配置的緩存auth_cache。如圖6.29所示。
.. figure:: img/security/ldap_users_cache.png
?? :alt: ldap_users_cache
?? 圖 6.29 對LDAP數據源使用緩存
設置好后,單擊Save Changes按鈕,保存更改。
按照需要在acl_users中調整數據源的認證順序及其它設置,過后測試在站點頁面中與關系數據庫集成是否沒問題,到這里,配置與LDAP服務器集成的工作就完成了。
關系數據庫用戶集成
--------------------
在第十四章的《訪問關系數據庫》的章節中詳細介紹了Plone與關系數據庫如何集成,在了解Plone是如何與關系數據庫集成后設置與關系數據庫用戶集成就很方便了。
首先,在您的關系數據庫中建立一個新的用戶數據庫有數據庫,下面的例子用MySQL創建的一個數據庫及數據庫表。
::
?# 建立user_database數據庫
?create database user_database;
?# 在user_database數據庫中建立users_table表
?create table user_database.users_table (
?? username varchar primary key,
?? full_name varchar,
?? email varchar,
?? password varchar
?);
在站點在ZMI根目錄下建立一個與關系數據庫的連接(查看《訪問關系數據庫》的章節了解如何建立讓Plone站點連接關系數據庫)。取連接數據庫的接口ID為mysql_users_database,確保能與 MySQL數據庫取得連接。
需要安裝SQLPASPlugin擴展產品包,這是Plone針對PAS做的SQL的插件包,按照傳統方式安裝后,在acl_users目錄中,右側的下拉菜單中有會sql_user_manager插件,如下圖6.30。
.. figure:: img/security/sql_user_manager.png
?? :alt: sql_user_manager
?? 圖 6.30 sql_user_manager 插件
添加sql_user_manager插件項,出現下圖的表單,取一個您想給予的Id,在Database Connection中就會有連接MySQL數據庫的接口mysql_users_database,這正是前面配置的連接接口(您的站點中如果有多個,在這里可以選擇其中的一個)。如圖6.31所示。
.. figure:: img/security/mysql_user_manager.png
?? :alt: sql_user_manager
?
?? 圖 6.31 添加sql_user_manager插件
填完表單后,單擊add user manager按鈕保存設置,在acl_users目錄中就添加了一個連接關系數據庫的數據源插件mysql_user_manager,下面需要對數據源進行配置,進入mysql_user_manager,設置它提供的接口,如圖6.32所示。
.. figure:: img/security/mysql_functionality.png
?? :alt: mysql_functionality
?? 圖 6.32 設置SQL數據源接口
按照您的要求設置它提供認證、添加用戶、列舉用戶、用戶管理等接口,單擊Update更改保存設置。進入mysql_user_manager的Properties標簽頁設置數據源的屬性項,如圖6.33所示。
.. figure:: img/security/mysql_porperties.png
?? :alt: mysql_porperties
?? 圖 6.33 設置SQL數據源的屬性項
對應于在數據庫中建立的表,依次在屬性項中填入與數據庫中表及表中字段映射關系,如下對應屬性項內容。 ::
?users_table????????? :???? user_talbe
?users_col_username?? :???? username
?users_col_password?? :???? password
?col_mapping????????? :???? email/email
??????????????????????????? full_name/fullname
設置好屬性項后,單擊Save Changes保存設置,這樣就設置好了數據源的屬性項了,下面需調整SQL數據源中的調整一些ZSQL方法,進入mysql_user_manager的Contents標簽頁,在這里面會看到sqlCreateUser,sqlLoadAllUsers, sqlLoadUser, sqlRemoveUser, sqlUpdateUser等默認的ZSQL方法,在這個頁面中也可以添加新的ZSQL方法,下面需要對現有的ZSQL方法調整一下,讓他們與屬性項,與數據庫字段對應。以sqlCreateUser為例,如圖6.34所示。
.. figure:: img/security/sqlCreateUser.png
?? :alt: sqlCreateUser
?? 圖 6.34 調整ZSQL方法與屬性項、與數據庫字段對應
對sqlCreateUser的Arguments加入其它的字段,如上圖6.28中所示,加上下面這些字段。 ::
?username password full_name email
對于sqlCreateUser寫的ZSQL方法也需要調整,寫ZSQL其實很簡單,就是在SQL中加上DTML的語言,如下面的代碼。 ::
?INSERT INTO user_table (username, password, full_name, email)
?VALUES (<dtml-sqlvar username type=string>,
??????? <dtml-sqlvar password type=string>,
??????? <dtml-sqlvar full_name type=string>,
??????? <dtml-sqlvar email type=string>
?)
????
這些是實現添加數據的功能,在頁面下方操作按鈕中的Change and Test 可以對ZSQL方法進行測試。依照這種方式更改其它ZSQL方法,確認每個使用到的ZSQL方法都能測試通過。
按照需要在acl_users中調整數據源的認證順序及其它設置,過后測試在站點頁面中與關系數據庫集成是否沒問題,到這里讓Plone站點與關系數據庫用戶集成的設置工作就完成了。
小結
==============
用戶和權限管理是學習Plone很重要的部分,本章講述用戶管理的相關概念,了解Plone中的用戶,用戶組,角色等概念,進一步介紹了在Plone中管理用戶和組;本章在講述權限管理中,先介紹常用的Plone權限設置,這是Plone中常用的權限設置工作,進而深入Zope中了解權限管理,以及介紹了幾個在ZMI中設置的日常權限管理例子;本章還介紹了用戶管理文件夾的使用原理,及講述了與第三方認證集成,并通過實際操作與LDAP用戶數據源集成,和與關系數據庫用戶集成。
轉載自:http://www.czug.org/plone/zopen-plonebook/338311
轉載于:https://blog.51cto.com/padangel/762277
總結
以上是生活随笔為你收集整理的plone进行 用户和权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CISCO PIX防火墙的配置
- 下一篇: H3C交换机设置DHCP中继,配合Lin