Liferay之权限Word下载.docx
《Liferay之权限Word下载.docx》由会员分享,可在线阅读,更多相关《Liferay之权限Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
![Liferay之权限Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/2/dfbbdf9b-105a-416c-bf5a-bf3d64d706cd/dfbbdf9b-105a-416c-bf5a-bf3d64d706cd1.gif)
这是后话,今后在开发相关的文章中再讨论。
如果理解了上面关于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->
选择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.<
resource-action-mapping>
2.
3.
<
portlet-resource>
4.
5.
portlet-name>
8portlet-name>
6.
7.
supports>
8.
9.
action-key>
ADD_EVENTaction-key>
10.
11.
CONFIGURATIONaction-key>
12.
13.
VIEWaction-key>
14.
15.
16.
17.
community-defaults>
18.
19.
20.
21.
22.
23.
guest-defaults>
24.
25.
26.
27.
28.
29.
guest-unsupported>
30.
31.
32.
33.
34.
35.
36.
37.
model-resource>
38.
39.
model-name>
com.liferay.portlet.calendar.model.CalEventmodel-name>
40.
41.
portlet-ref>
42.
43.
44.
45.
46.
47.
48.
49.
DELETEaction-key>
50.
51.
PERMISSIONSaction-key>
52.
53.
UPDATEaction-key>
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.resource-action-mapping>
80.
首先,我们的权限定义的rootElement为<
,所有的权限定义都必须包含在里面
接着,我们可以看到liferay的权限定义分<
和<
两种,portlet-resource中定义的,我们可以在这里看到,
主要可以控制portlet的查看,配置权限,还有就是可以控制按钮一类设置的权限
model-resource的权限控制到每条记录上
5.community-defaults>
这里告诉我们当一个community拥有这个portlet的时候所具有的权限。
5.guest-defaults>
当guest用户可以看到这个portlet的时候默认具有的权限,这里都为查看。
5.guest-unsupported>
这里为guest用户不提供的权限
上面的这些设置的权限都可以在运行的时候修改
ADD_EVENT这类的定义,都已经在ActionKeys中有对应的常量定义,在二次开发的时候可以继承这个类来加入自定义的权限内容
在定义完权限的resource后,我们需要在default.xml中加入对应的path
resource
file="
resource-actions/portal.xml"
/>
resource-actions/calendar.xml"
resource-actions/communities.xml"
resource-actions/imagegallery.xml"
resource-actions/wiki.xml"
emsp-resource-actions/default.xml"
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中,
name>
view-action<
/name>
value>
/wiki/view<
/value>
指定了这个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对象。
设定<
entityname="
AIReports"
local-service="
true"
>
进入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