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

本文介绍了JSPWiki v2.4.71版本中的权限管理系统,涵盖了PagePermission、WikiPermission和GroupPermission等权限类型,并解释了如何通过角色和权限目标实现细粒度的访问控制。
理解并使用 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 NamePrincipal Explanation
AllAll users, regardless of authentication status
AnonymousIf the user hasn't supplied a name
AssertedIf the user has supplied a cookie with a username
AuthenticatedIf the user has authenticated with the Container or UserDatabase
AdminAdministrators (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 (*) does not imply <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.

PermissionAllAnonymousAssertedAuthenticatedAdminAdmin
vemrdvemrdvemrdvemrdvemrdvemrd
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 文件中, 可以手工
本 PPT 介绍了制药厂房中供配电系统的总体概念与设计要点,内容包括: 洁净厂房的特点及其对供配电系统的特殊要求; 供配电设计的一般原则与依据的国家/行业标准; 从上级电网到工厂变电所、终端配电的总体结构与模块化设计思路; 供配电范围:动力配电、照明、通讯、接地、防雷与消防等; 动力配电中电压等级、接地系统形式(如 TN-S)、负荷等级与可靠性、UPS 配置等; 照明的电源方式、光源选择、安装方式、应急与备用照明要求; 通讯系统、监控系统在生产管理与消防中的作用; 接地与等电位连接、防雷等级与防雷措施; 消防设施及其专用供电(消防泵、排烟风机、消防控制室、应急照明等); 常见高压柜、动力柜、照明箱等配电设备案例及部分设计图纸示意; 公司已完成的典型项目案例。 1. 工程背景与总体框架 所属领域:制药厂房工程的公用工程系统,其中本 PPT 聚焦于供配电系统。 放在整个公用工程中的位置:与给排水、纯化水/注射用水、气体与热力、暖通空调、自动化控制等系统列。 2. Part 01 供配电概述 2.1 洁净厂房的特点 空间密闭,结构复杂、走向曲折; 单相设备、仪器种类多,工艺设备昂贵、精密; 装修材料与工艺材料种类多,对尘埃、静电等更敏感。 这些特点决定了:供配电系统要安全可靠、减少积尘、便于清洁和维护。 2.2 供配电总则 供配电设计应满足: 可靠、经济、适用; 保障人身与财产安全; 便于安装与维护; 采用技术先进的设备与方案。 2.3 设计依据与规范 引用了大量俄语标准(ГОСТ、СНиП、SanPiN 等)以及国家、行业和地方规范,作为设计的法规基础文件,包括: 电气设备、接线、接地、电气安全; 建筑物电气装置、照明标准; 卫生与安全相关规范等。 3. Part 02 供配电总览 从电源系统整体结构进行总览: 上级:地方电网; 工厂变电所(10kV 配电装置、变压
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值