网站开发与建设主要干什么,重庆网站页面优化,申请了域名怎么建网站,网站免费加速器用户和权限管理 .. Contents:: .. sectnum:: :prefix: 6. 对于任何一个系统#xff0c;我们都会关心它的安全性问题。我们需要控制不同的用户#xff0c;在网站的不同地方#xff0c;在不同的阶段#xff0c;能够拥有不同的权限。Plone具有一个强大的、柔性、精细粒度的… 用户和权限管理 .. Contents:: .. sectnum:: :prefix: 6. 对于任何一个系统我们都会关心它的安全性问题。我们需要控制不同的用户在网站的不同地方在不同的阶段能够拥有不同的权限。Plone具有一个强大的、柔性、精细粒度的安全性模式可针对每个对象为用户、组分配权限支持委托授权。 本章首先穿插介绍所有相关的概念术语及Plone中怎样管理用户和设置权限同时深入Zope的权限介绍并对管理用户的文件夹及相关作用做详细介绍包括原理、及与其它服务集成如LDAPLightweight 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, 选择对通过浏览器FTPWebDAV及 XML-RPCXML-RPC 是一套规范及其一系列的实现,允许运行在不同操作系统、不同环境的程序基于internet进行远程过程调用。访问协议映射 credentials_basic_auth, 设置通过HTTP认证的接口 credentials_cookie_auth, 设置通过cookie认证的接口 local_roles, 设置管理本地角色的接口 mutable_properties, 设置管理存储在ZODBPlone默认存储的数据库中的用户属性 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, 协议选择器考查插件它指定用户请求各种协议的认证比如指定FTPWebDav使用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服务器集成需要安装以下几个产品扩展包 - SimpleUserFolderZope的扩展包将用户名和口令存放在Plone默认的数据库中这个产品没有支持组的功能。 - LDAPUserFolderPlone的扩展包这个产品对Zope的用户文件夹重新定义让Plone用户存储与LDAP服务器集成。如活动目录、OpenLDAP。 - LDAPMultiPluginsPlone的扩展包这个产品提供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标签页在这里面会看到sqlCreateUsersqlLoadAllUsers, 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 typestring, dtml-sqlvar password typestring, dtml-sqlvar full_name typestring, dtml-sqlvar email typestring ) 这些是实现添加数据的功能在页面下方操作按钮中的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