`

(转)理解并使用 JSPWiki 中的权限控制

阅读更多
理解并使用 JSPWiki 中的权限控制

by Jacky Liu (beansoft@126.com) version 1.0 2007.01.06
JSPWiki(http://www.jspwiki.org/) 是一款简单易用的基于 JSP + Servelt + JavaBean 的不依赖于其它 J2EE 框架的 Wiki 系统, 它本身的存储基于文件系统, 只需要 Tomcat 即可运行, 代码也比较便于读懂并加以改进. 虽然说是简单易用, 但是因为其后台管理系统的功能不够强大, 所以在公司内部使用时仍旧遇到了一些权限控制的问题. 本文将基于JSPWiki v2.4.71 来讨论 JSPWiki的权限管理.

注: 如果不加说明, 引用的资料都来自于 JSPWiki 源码中的注释; 文中的源码均来自于 JSPWiki v2.4.71 的源代码包.

我们首先介绍它的权限系统, 最后再介绍如何使用.

一. 权限系统介绍

JSPWiki 有下列的一些权限相关的类:
com.ecyrd.jspwiki.auth.authorize.Role 中定义了一些内置的 principal, 这些 principal 有:
Principal Name Principal Explanation
All All users, regardless of authentication status
Anonymous If the user hasn't supplied a name
Asserted If the user has supplied a cookie with a username
Authenticated If the user has authenticated with the Container or UserDatabase
Admin Administrators (principals or roles possessing AllPermission)
are allowed to delete any page, and can edit, rename and delete
groups. You should match the permission target (here, 'JSPWiki')
with the value of the 'jspwiki.applicationName' property in
jspwiki.properties. Two administative groups are set up below:
the wiki group "Admin" (stored by default in wiki page GroupAdmin)
and the container role "Admin" (managed by the web container).

在 com.ecyrd.jspwiki.auth.GroupPrincipal 中定义了基于 Group 的角色, 这些角色有如下限制:
* <li>Groups cannot have the same name as a built-in Role (e.g., "Admin",
* "Authenticated" etc.)</li>
* <li>Groups cannot have the same name as an existing user</li>
. 不能和内置角色重名, 不能和现有的用户名一样.

在 com.ecyrd.jspwiki.auth.permissions 包下面定义了如下所示的一些 Wiki 的权限:
com.ecyrd.jspwiki.auth.permissions.PagePermission 页面权限
Permission to perform an operation on a single page or collection of pages in a given wiki. Permission actions include: view, edit (edit the text of a wiki page), comment, upload, modify (edit text and upload attachments), delete and rename.

The target of a permission is a single page or collection in a given wiki. The syntax for the target is the wiki name, followed by a colon (:) and the name of the page. "All wikis" can be specified using a wildcard (*). Page collections may also be specified using a wildcard. For pages, the wildcard may be a prefix, suffix, or all by itself. Examples of targets include:

*:*
*:JanneJalkanen
*:Jalkanen
*:Janne*
mywiki:JanneJalkanen
mywiki:*Jalkanen
mywiki:Janne*

For a given target, certain permissions imply others:

  • delete and rename imply modify
  • modify implies edit and upload
  • edit implies comment and view
  • commentanduploadimplyviewTargets that do not include a wiki prefixneverimply others.
这个权限是我们最常使用的权限, 限定了用户可以对页面进行哪些操作, 可以使用的权限包括: *, comment, delete, edit, modify, rename, upload, view.

com.ecyrd.jspwiki.auth.permissions.WikiPermission Wiki 权限

Permission to perform an global wiki operation, such as self-registering or creating new pages. Permission actions include: createGroups, createPages, editPreferences, editProfile and login.

The target is a given wiki. The syntax for the target is the wiki name. "All wikis" can be specified using a wildcard (*). Page collections may also be specified using a wildcard. For pages, the wildcard may be a prefix, suffix, or all by itself.

Certain permissions imply others. Currently,createGroupsimpliescreatePages.

这个权限则定义了用户登录, 注册, 建立新页面是否可用, 也是比较常用的. 包括: createGroups, createPages, editPreferences, editProfilelogin.

com.ecyrd.jspwiki.auth.permissions.GroupPermission 组权限

Permission to perform an operation on a group in a given wiki. Permission actions include: view, edit, delete.

The target of a permission is a single group or collection in a given wiki. The syntax for the target is the wiki name, followed by a colon (:) and the name of the group. "All wikis" can be specified using a wildcard (*). Group collections may also be specified using a wildcard. For groups, the wildcard may be a prefix, suffix, or all by itself. Examples of targets include:

*:*
*:TestPlanners
*:*Planners
*:Test*
mywiki:TestPlanners
mywiki:*Planners
mywiki:Test*

For a given target, certain permissions imply others:

  • edit implies view
  • delete implies edit and view

Targets that do not include a wiki prefix never imply others.

GroupPermission accepts a special target called <groupmember> that means "all groups that a user is a member of." When included in a policy file grant block, it functions like a wildcard. Thus, this block:

  grant signedBy "jspwiki", 
principal com.ecyrd.jspwiki.auth.authorize.Role "Authenticated" {
permission com.ecyrd.jspwiki.auth.permissions.GroupPermission "*:<groupmember>", "edit";
means, "allow Authenticated users to edit any groups they are members of." The wildcard target (*) doesnotimply<groupmember>; it must be granted explicitly.

这个权限一般来说只对管理员进行开放, 用来对用户分组, 注意每个 Group 的名称也对应着一个安全角色, 这样便于为多个用户指定一个权限.
com.ecyrd.jspwiki.auth.permissions.AllPermission 所有权限
Permission to perform all operations on a given wiki.
警告: 这个权限很危险, 一般来说只对管理员开放.

用户可以通过访问 http://localhost:8080/wiki/admin/SecurityConfig.jsp 来查看自己的详细的权限表(全局级别, 不包含页面级别, 详细的信息请将鼠标指针悬停在单元格上方片刻后查看提示信息):

The colors in each cell show the results of the test. Green means success; red means failure. Hovering over a role name or individual cell will display more detailed information about the role or test.

Permission All Anonymous Asserted Authenticated Admin Admin v e m r d v e m r d v e m r d v e m r d v e m r d v e m r d
PagePermission "JSPWiki:Main"                                                            
PagePermission "JSPWiki:Index"                                                            
PagePermission "JSPWiki:GroupTest"                                                            
PagePermission "JSPWiki:GroupAdmin"                                                            
GroupPermission "JSPWiki:Admin"                                                            
GroupPermission "JSPWiki:TestGroup"                                                            
GroupPermission "JSPWiki:Foo"                                                            
WikiPermission "JSPWiki","createGroups"            
WikiPermission "JSPWiki","createPages"            
WikiPermission "JSPWiki","login"            
WikiPermission "JSPWiki","editPreferences"            
WikiPermission "JSPWiki","editProfile"            
AllPermission "JSPWiki"            
Important: these tests do not take into account any page-level access control lists. Page ACLs, if they exist, will contrain access further than what is shown in the table.

这个表中显示的红色的部分就是当前用户所没有的权限.

二. 权限系统使用

如上所示, Admin 的账户可以通过两个途径来建立:
方式1: 建立一个名为 Admin 的 Group, 在这个版本中是保存在文件 WEB-INF\groupdatabase.xml 文件中, 可以手工
分享到:
评论

相关推荐

    理解并使用 JSPWiki 中的权限控制

    ### 理解并使用 JSPWiki 中的权限控制 #### 一、权限系统介绍 JSPWiki 是一款简单易用且功能强大的 Wiki 系统,它基于 JSP、Servlet 和 JavaBean 技术构建而成,并且不依赖任何特定的 J2EE 框架。JSPWiki 的权限...

    JSPWiki使用说明书

    2. **核心组件**:`WikiEngine`是核心类,负责页面管理、权限控制和渲染等功能;`WikiPage`表示wiki页面,包含了页面内容和元数据。 3. **扩展点**:JSPWiki提供许多插件接口,如`Action`、`Provider`、`Filter`,...

    jspwiki之mysql版

    《深入理解JSPWiki与MySQL的整合应用》 在互联网开发中,文档管理和协作编辑是一项重要的任务,而JSPWiki作为一个开源的、基于Java的轻量级wiki引擎,为开发者提供了便利的在线协作平台。JSPWiki以其易用性、可扩展...

    jspwiki-2.2.33-src.zip_jsp_jspwiki_jspwiki 2.2_jspwiki2.2_jspwik

    3. **调整权限控制**:通过修改`jspwiki.properties`配置文件,可以设置用户角色和权限,实现精细化管理。 4. **数据存储扩展**:如果需要连接其他类型的数据库或使用云存储,可以在`jspwiki.properties`中配置相应...

    jspwiki程序加文档

    - 权限控制:管理员可以设定用户权限,控制谁可以编辑、删除页面。 5. **JSPWiki的文档** - 文档通常包括安装指南、用户手册、开发者文档和API参考,帮助用户理解如何安装、配置、使用和扩展JSPWiki。 - 文档中...

    jspwiki相关资料

    这个压缩包文件包含了JSPWiki的相关资料,包括源码和配置数据库的信息,对于理解和使用JSPWiki非常有帮助。 **1. JSPWiki的基本概念** JSPWiki是一个使用Java Servlet和JSP技术构建的轻量级Wiki系统。它的核心功能...

    jspwiki-2.1.115-alpha-src.zip_Alpha_jspwiki_jspwiki eclipse_mult

    开发者可以使用Eclipse来管理和编辑JSPWiki的源代码,利用其强大的代码提示、调试和版本控制等功能,提高开发效率。 **3. MultipartRequest.jar** "MultipartRequest.jar"是一个处理HTTP多部分请求的Java库。在Web...

    [博客空间]JSPWiki ALPHA release v2.3.92_jspwiki-2.3.92-alpha-src.rar

    1. **核心库**:包含了JSPWiki的主要逻辑,如页面存储、渲染、权限控制等。 2. **Web应用**:Web应用目录包含部署到Web服务器的必要文件,如JSP页面、Servlet和配置文件。 3. **插件**:源代码中的插件目录提供了已...

    jspwiki-wikipages-pt_BR-2.10.1.zip

    5. **安全性**:JSPWiki有内置的权限管理系统,可以控制谁可以查看、编辑或管理页面,确保信息安全。 6. **可定制性**:开发者可以根据需求自定义模板和样式,适应不同的企业或组织的视觉风格。 **DIIRT详解:** ...

    JSPWiki-2.8.3-源代码

    - **WikiEngine**: 负责整个wiki的运行,包括页面存储、权限控制、URL映射等。 - **PageProvider**: 提供页面的读写接口,可能有多种实现,如文件系统、数据库等。 - **Action**: 处理用户请求,如编辑、查看、...

    jspwiki-2.0.52-src.zip_jsp

    "jspwiki-2.0.52-src.zip"中的源代码可以帮助开发者理解JSPWiki的架构和实现细节,包括如何处理HTTP请求、存储和检索数据、以及渲染页面等。这对于想要定制wiki功能或集成到现有项目的开发者来说尤其有用。 5. **...

    [博客空间]JSPWiki ALPHA release v2.3.92_jspwiki-2.3.92-alpha-src.zip

    5. **用户认证与授权**:JSPWiki可能包含用户登录、权限控制等功能,涉及会话管理、安全策略等。 6. **版本控制**:Wiki的特点之一是版本追踪,学习源码可以帮助理解如何实现这一功能。 7. **国际化与本地化**:作为...

    jsp制作的wiki

    在JSP中,我们可以使用内置的对象如`request`、`response`、`session`和`application`来处理用户请求,管理会话状态。Servlet则用于处理更复杂的业务逻辑,比如验证用户身份、管理文档存储和版本控制。 1. **用户...

    搭建java开源软件wiki

    在标签中提到的“源码”和“工具”,表明我们将深入到软件的源代码级别,并可能涉及一些开发工具的使用,如IDE(IntelliJ IDEA或Eclipse)、版本控制工具和调试器。 综上所述,搭建Java开源软件Wiki是一个涉及技术...

    Wikidora-开源

    6. **协作与权限管理**:Wikidora 建立在 JSPWiki 的基础上,继承了其强大的协作功能,同时可能进一步优化了权限管理,使得团队成员可以按照角色和权限级别进行协作。 在wikidora项目中,我们可以看到开源软件的...

    Wiki

    例如,许多开源项目使用Java实现的维基引擎,如JSPWiki、Confluence和XWiki,来创建和维护项目的文档和社区交流平台。这些维基引擎通常具备以下功能: 1. **内容创作**:Java维基引擎提供简单的Markdown或HTML语法...

Global site tag (gtag.js) - Google Analytics