Liferay之权限.docx

上传人:b****6 文档编号:5949653 上传时间:2023-01-02 格式:DOCX 页数:13 大小:381.02KB
下载 相关 举报
Liferay之权限.docx_第1页
第1页 / 共13页
Liferay之权限.docx_第2页
第2页 / 共13页
Liferay之权限.docx_第3页
第3页 / 共13页
Liferay之权限.docx_第4页
第4页 / 共13页
Liferay之权限.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Liferay之权限.docx

《Liferay之权限.docx》由会员分享,可在线阅读,更多相关《Liferay之权限.docx(13页珍藏版)》请在冰豆网上搜索。

Liferay之权限.docx

Liferay之权限

如何使用Liferay权限配置

当前的Liferay权限结构是从4.0版本开始的。

jsr168中基于role的权限设计只解决了开发技术层面,并没有和实际的应用关联起来。

在Liferay中权限设计有很大的扩展,并可在多个层次进行配置。

首先要解释的是Liferay的权限模型。

首先看一下Liferay的定义

Apermissionisdefinedasanactionactingonaresource

在Liferay中,权限作用是判断当前用户是否允许在Resource上进行某项操作(action)。

Resource代表着一个个的可操作的实体。

在Portal系统中,最直观的Resource就是一个个的Portlet。

但是由于应用的原因,在Portlet下还可以根据应用的功能再细分,最典型的就是MessageBoardPortlet下还分Category和Message两类Resource。

这些Resource是很直观的。

此外还存在一些特殊的Resource可以控制,比如每张Page也是Resource。

另外由于在Liferay中可以配置多个Community,每个Community都可以多次放置同一种Portlet作为多个Instance的,所以对于Resource又附加了Scope的概念。

Resource有三种Scope:

Enterprise、Community和Individual。

Enterprise代表整个Portal系统中的一类资源,Community需要指明是哪个Community下的一类资源,Individual则是独立的Resource。

举个例子,我们要定义一个Permission

View+MessageBoardTopic/Enterprise

上面的定义说明,“查看当前Portal系统中任一个MessageBoard的Topic”。

再举个例子

UpdateMessageBoardTopic/"Developer"CommunityScope

上面的定义说明,“修改Developer这个Community下的任一个MessageBoardTopic”。

在LiferayPortal中所有Portlet都会有默认的View/ConfigurationAction。

其他的Resource和Action都需要开发人员预先设计,并在代码中调用PermissionChecker检验当前用户是否拥有权限。

这是后话,今后在开发相关的文章中再讨论。

如果理解了上面关于Resource、Scope和Action,接下去我们就可以讨论Liferay中如何进行设置,将Permission和User联系起来从而将权限赋予某人。

首先说最简单的Individual类型的Resource的配置方法。

如果以管理员身份登录系统,那么在任何一个portlet的右上角都有一个齿轮图标,点击该图标后选择Permissions标签就可进行该portlet得配置。

假设我们以管理员身份登录后切换到supportCommunity,对MessageBoards权限进行配置。

新出现的页面第一排中如果选择Users、Organizations、Locations、UserGroups,下方还将出现Current和Available。

Current中是当前已经配置的结果,Available是可供选择的人员、机构的列表。

我们选择User->Available->TestHKG1上打钩。

点击UpdatePermissions。

将所有权限都选择到Current下。

配置后再查看Users->Current,现在TestHKG1已经在Current下了。

使用test.hkg.1@账户登录系统,可以看到Support下的MessageBoards上出现了配置图标。

而且有AddCategory按钮。

然后看一下如何配置其他scope的权限。

首先以管理员身份登录系统,将EnterpriseAdmin添加到页面上。

选择Roles,添加一个Role名称为SupportMBAdmin,选择Delegate。

在portlet列表中选择MessageBoards,随后将Configuration后的Scope选择为Community,Next->Available->选择Support->Finish。

随后使用SupportMBAdmin的assign,将TestHKG2选中。

使用test.hkg.2@账户登录系统,可以看到Support下的MessageBoards上出现了配置图标。

hkg.1和hkg.2有什么区别呢?

hkg.1获得的是Individual的Resource。

只有这个Portlet是可以允许他配置的。

hkg.2获得的是supportCommunity下任一个MessageBoards的配置权限。

最后要说明的是,个人页面上的Portlet的Permission配置是没有意义的。

因为其他人不能查看你的页面,也就无法配置了。

写得不错,不过liferay的权限更加强大,还有对model的权限配置,精确到单条记录

利用liferay对权限开发也比较容易,写法也很固定,大家可以试试

 

HOWTO:

liferay权限开发

(一)

权限控制是liferay4.0以后增加的新特性。

在liferay中开发权限是一件很容易的事情,基本上都是通过定义xml来实现。

首先,我们来看看给自己的portlet加上权限控制,主要要完成以下四步操作(DRAC):

1.Defineallresourcesandtheirpermissions.

先定义所有所需要的权限(包括portletresource和modelresource)

2.Foralltheresourcesdefinedinstep1,registerthemintothepermissionsystem.Thisisalsoknown

simplyas“addingresources.”

当定义完权限后,我们需要把权限的定义注册到权限系统中,即把权限相关信息保存到数据库中

3.Associatethenecessarypermissionstotheseresources.

把所需的permission关联到resources上

4.Checkpermissionbeforereturningresources.

在相应的位置加上权限检验的方法

在解析上面四个步骤以前,有两个定义是非常重要的:

1.              Resource-在portal系统中,可以简单的认为Resource是一个个可以操作的实体对象。

举个例子:

一般resources包括portlets(如:

MessageBoards,Calendar,etc),java类(如:

MessageBoardTopics,CalendarEvents,etc)还有flies(如:

documents,images,etc)

2.              Permission-一个个可运行的权限动作,都已经在resourcez中定义了。

举个例子:

“查看calendar的portlet”这个权限动作已经通过resource在liferay的权限系统中定义

下面来简单解析一下开发权限的四个步骤:

一.DefiningResourcesandActions

      默认的权限定义的xml文件放portal/portal-ejb/classes/resource-actions中

我们来看看calendar的权限定义

xml代码

1.  

2.  

3.      

4.  

5.       8portlet-name>  

6.  

7.         

8.  

9.           ADD_EVENTaction-key>  

10.  

11.           CONFIGURATIONaction-key>  

12.  

13.           VIEWaction-key>  

14.  

15.       supports>  

16.  

17.         

18.  

19.           VIEWaction-key>  

20.  

21.        community-defaults>  

22.  

23.         

24.  

25.           VIEWaction-key>  

26.  

27.       guest-defaults>  

28.  

29.         

30.  

31.           ADD_EVENTaction-key>  

32.  

33.       guest-unsupported>  

34.  

35.    portlet-resource>  

36.  

37.      

38.  

39.       com.liferay.portlet.calendar.model.CalEventmodel-name>  

40.  

41.         

42.  

43.           8portlet-name>  

44.  

45.       portlet-ref>  

46.  

47.         

48.  

49.           DELETEaction-key>  

50.  

51.           PERMISSIONSaction-key>  

52.  

53.           UPDATEaction-key>  

54.  

55.           VIEWaction-key>  

56.  

57.        supports>  

58.  

59.         

60.  

61.           VIEWaction-key>  

62.  

63.       community-defaults>  

64.  

65.         

66.  

67.           VIEWaction-key>  

68.  

69.       guest-defaults>  

70.  

71.         

72.  

73.           UPDATEaction-key>  

74.  

75.       guest-unsupported>  

76.  

77.    model-resource>  

78.  

79.resource-action-mapping>  

80.  

 

首先,我们的权限定义的rootElement为,所有的权限定义都必须包含在里面

接着,我们可以看到liferay的权限定义分两种,portlet-resource中定义的,我们可以在这里看到,

主要可以控制portlet的查看,配置权限,还有就是可以控制按钮一类设置的权限

model-resource的权限控制到每条记录上

xml代码

1.  

2.  

3.           VIEWaction-key>  

4.  

5.community-defaults>  

这里告诉我们当一个community拥有这个portlet的时候所具有的权限。

1.  

2.  

3.           VIEWaction-key>  

4.  

5.guest-defaults>  

 

当guest用户可以看到这个portlet的时候默认具有的权限,这里都为查看。

 

1.  

2.  

3.           ADD_EVENTaction-key>  

4.  

5.guest-unsupported>  

 

这里为guest用户不提供的权限

 

上面的这些设置的权限都可以在运行的时候修改

ADD_EVENT这类的定义,都已经在ActionKeys中有对应的常量定义,在二次开发的时候可以继承这个类来加入自定义的权限内容

在定义完权限的resource后,我们需要在default.xml中加入对应的path

 

 

xml代码

1.  

2.  

3.      

4.  

5.      

6.  

7.      

8.  

9.      

10.  

11.      

12.  

13.      

14.  

15.resource-action-mapping>  

 

Default.xml的路径在portal(-ext).properties中可以配置

resource.actions.configs=resource-actions/default.xml

完成的上述工作后,我们需要在liferay的权限系统中把这些信息注册到数据库中(待续)

 

Liferay的授权与内容管理

 

本节主要内容是Liferay的授权操作以及内容管理,在介绍授权早作的同时将结合上一篇的内容,探讨程序背后的执行流程,也会凸现出在进行自己的portlet开发时所要注意的权限相关代码,为portlet的开发打下基础。

 

 liferay-portal-4.1.2的权限管理主要有2部分构成:

1.user的部门归属

2.对单个portlet的授权

 

超级用户登陆系统后,将进入超级用户的管理界面,管理界面总共有Guest、Private、CMS、Support四层组成,即在Myplace中的4种视图,现对其进行介绍.

Guest视图:

主要管理普通用户的所访问的主页内容,在此视图中可以管理展现在主页上的各个portlet,管理portlet中展现的内容以及portlet的展现形式以及方位。

Portlet的内容管理放在稍后的视图中详细讲解,portlet的方位以及显示形式后可以通过页面上直接的拖放进行设置。

     默认情况下,我们所列的portlet就是匿名用户所看到的门户,在每个portlet的设置中,我们还看到了权限的设置,可以将这个portlet的配置,查看等权限(每个portlet的权限不相同,每个都有配置、查看权限,但是有个复杂的portlet如用户管理的就有更多的如添加用户、删除用户等权限)授予用户,这里权限的授予分6级,直接授予用户,授予组织、授予地点、授予用户群、授予社群和授予客人(用户群和社群是自定义的)。

Liferay的用户机制为公司—地点—组织—个人,所以授予某一高级的组,下挂的用户将都会自动获得权限。

在我的应用中,我将WIKI加入了门户首页,同时将察看与删除授予匿名用户,所以,首页就拥有了一个大家参与修改的区域WIKI了!

Private视图:

这个是超级用户的私人界面,这里特别分析了几个简单portlet的权限管理的实现。

HelloWorldPortlet。

位置Test->helloworld这个portlet是最简单的一个展示,而且仅仅只有view的功能,所以这个权限管理就是能否在用户的视图中显示就行了,代码中的权限代码无,只是由layout调用HelloWorldPortlet。

注:

这里是通过设置直接调用HelloWorldPortlet,没有经过Struts框架,所以代码直接继承GenericPortlet,不能由路径访问。

Announcements。

位置,这个portlet中访问路径由struts配置文件指定,这个portlet代码ViewAction继承PortletAction,PortletAction继承的是StrutsAction.在portlet.xml中,

view-action

/wiki/view

指定了这个portlet的view所调用的路径,portal容器会根据struts的配置调用指定的Action。

在进行action调用时,很显然通过了Liferay扩展的PortalRequestProcessor(上一篇提到),也就进行了权限检查。

配置Announcements的路径在liferay-portlet.xml中配置,为/announcements/edit_configuration,同样这也是一个struts路径,她的权限管理也同view一样,在PortalRequestProcessor中完成。

IFramePortlet。

这个portlet也是一个简单标签的使用例子。

在这个portlet中,与HelloWorldPortlet相同,也没有Struts的路径配置,而是直接在portlet.xml中定义了接受请求的Action,所继承的StrutsPortlet由于不是由strutsAction而是GenericPortlet扩展而来,所以在访问的时候没有通过PortalRequestProcessor,所以其内部明确调用了liferay的权限管理代码:

PermissionCheckerchecker=

            PermissionThreadLocal.getPermissionChecker();

 

由上面我们所分析的几个简单的portlet来看,以后在进行portlet开发时有2种选择,当逻辑比较少时,我们可以象IFramePortlet一样,通过对StrutsPortlet的继承完成。

当业务逻辑比较复杂时(多个路径),采用Struts进行路径配置时,最好同Announcements一样,通过继承PortletAction来将自身开发的portlet纳入liferay的权限管理框架中。

 

CMS视图:

明显,这个层进行文档管理,用过Guest视图就可以知道门户的所有的新闻文章都在journal中进行管理,对它的使用网上有很多很有用的文章,多用几次也就熟悉了,强大的文本、图像编辑功能可以就近使用而不再用自己编码,肯定也是很愉快的了:

 

Support视图:

这个视图也是其他用户(非管理员用户)登陆后的定制页面,由管理员进行定制,主要操作和上面一致。

 

Liferay的权限结构(liferay版本4.3.3)

Liferay能对每个具体的portlet进行控制,也能对portlet内的实体对象进行权限控制。

Liferay中进行管理的资源分为两种:

Portlet资源和model资源。

通过liferay的管理portlet就可以可视化的实现portlet的权限管理。

如果要对portlet内的实体对象model进行管理,需要进行一些程序实现。

现以一个具体的实例来说明如何实现portlet内的model资源的权限管理:

一个报表的portlet,其中包含一个具体的报表列表。

我们需要对每个具体报表进行权限控制。

建表

首先报表需要保存在数据库中,为报表建立报表数据库。

根据liferay的开发过程,步骤如下:

在ext-impl文件夹下,新建service.xml,该xml文件描述报表数据表的字段信息,并指定对应的java对象。

设定

进入ext-impl目录,执行命令:

antbuild-service。

自动生成建表的sql语句,在ext\sql\portal-tables.sql中。

Copy该语句并执行,生成对应的表。

之后,liferay自动生成相应的java类和接口,根据xml文件的描述不同,生成的类会有差别,主要有如下类:

实体类,Reports

持久类,ReportsPersistence,ReportsPersistenceImpl,ReportsUtil。

LocalService类,ReportsLocalServiceImpl,ReportsLocalService,

ReportsLocalServiceUtil。

.

Service类,ReportServiceImpl,ReportsService,ReportServiceUtil。

配置权限

针对portlet和报表对象,进行权限声明。

在ext-impl\resource-actions目录下,建立report.xml文件。

在该文件中,配置resource-action-mapping中的portlet-resource和

mode

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1