Liferay Portal 数据库介绍+

geekcheng

贡献于2012-07-05

字数:19392 关键词: Liferay Portal 门户平台Portal

页面布局 1 表Layout 主要功能:存储当前企业中所有社区的页面设置和布局的信息 特别注意:在此所提的社区包括:组织、地区、Guest社区、其他社区;还有一个特例就是如果用户具有Administrator角色或者Power User角色,那么他/她拥有的一个默认社区【My Community】,在该表中groupId = 83即表示该社区,通过查Group_表可以知道,groupId = 83表示userId = 2的用户,也即管理员。 (1)字段:privateLayout 0|公共页面 1|私有页面 (2)字段:layoutId 如果在同一个社区中有很多个页面,layoutId表示各页面,按顺序排列 (3)字段:parentLayoutId 如果一个页面下有子页面需要指定parentLayoutId (4)字段:priority 它指明同一个社区中处于同一级的页面按什么优先级显示; (5)字段:type_ 取值有:Portlet、Embedded、Article、URL、Link To Page 如果将type_设置为:Embedded或者URL,就可以将其他系统在Liferay Portal中显示出来; (6)字段:typeSettings 表示该页面的LayOut采用哪个模板,例如:一栏、两栏等(column-1=71_INSTANCE_aa9k,19, state-max= state-min= layout-template-id=2_columns_ii); 注意:在此,会根据不同的type_取值,typeSettings的取值也不一样,例如: type_ = Portlet,typeSettings = state-max-previous= column-1=71_INSTANCE_IACe, state-max= state-min= layout-template-id=2_columns_ii type_ = URL,typeSettings = url=http://www.hao123.com sitemap-include=1 target=_blank sitemap-changefreq=daily meta-robots= meta-description= description=It is testing...... javascript-3= sitemap-priority= javascript-2= javascript-1= meta-keywords= typeSettings中保存了一个很重要的信息: 我们如何知道一个页面中有哪些Portlets,这些Portlets又是如何摆放的,这些信息就保存在这个字段中。 查询语句: select plid,groupId,privateLayout,type_,typeSettings from dbo.Layout where privateLayout = 1 查询结果 例如:plid = 12801时,groupId = 12703(表示用户hut@liferay.com,具有Power User角色),typeSettings = column-2=11,29,8,19, column-1=71_INSTANCE_OY0d,82,23,61,65, layout-template-id=2_columns_ii(整个页面分为两栏,column-1有5个Portlet,column-2有4个Portlet,从中可以看出有哪些Portlet,各个Portlet放在哪个位置,如下图所示)。 (7)字段:themeId 表示该页面采用哪种主题,例如Brouchure、Classic、Desktop等; (8)字段:title 表示当前页面的HTML Title,在浏览器中可以看到; (9)字段:groupId 组Id 这里组有两种情况:一是指社区;二是指具有Power User角色的用户; 如何修改页面的Layout和Page Settings? (1)对社区的页面进行修改:选择【Communities】portlet,选择某个社区,点击【Actions】,选择【Configure Pages】,即可修改页面的Layout和Page Settings等; (2)对组织的页面进行修改:选择【Organizaiton Admin】porlte,选择某个组织,点击【Actions】,选择【Configure Pages】,即可修改页面的Layout和Page Settings等; (3)对地区的页面进行修改:选择【Location Admin】porlte,选择某个地区,点击【Actions】,选择【Configure Pages】,即可修改页面的Layout和Page Settings等; (4)管理员登录后,可以使用右上角的【Layout】和【Page Settings】对当前所属的社区、组织、地区下的页面进行修改,如下图所示: (5)对于非管理员,如果其没有【Configure Pages】的权限,则无法对页面进行修改;否则,可以进行修改。 2 表LayoutSet 主要功能:对社区中的页面进行管理,在该表中每个社区对应两条记录,一条管理public page,另外一条管理private page。 登录进Liferay后,在右上角【My Place】下,可以看到几个社区,第一个是每一个用户都具有的默认的社区【My Community】;第二个是当前用户所属的组织;第三个是当前用户所属的地区;第四个是每个默认的社区【Guest】,如果当前用户加入了该社区,则显示,如果当前用户退出了该社区,则不会显示;其余的是当前用户加入的其他社区。 注意:有三个地方具有【Configure Pages】功能:社区、组织、地区 表LayoutSet中记录数 = (用户数 + 组织(地区)数 + 社区数)×2 (1)字段:groupId指明属于哪个社区 (2)字段:privateLayout 0|公共页面 1|私有页面 (3)字段:logo 社区徽标 (4)字段:themId 主题 (5)字段:pageCount 该社区所拥有的页面数 (6)字段:virtualHost 该社区的虚拟访问路径 3 表PortletPreferences 主要功能:存储Portlet的个性化设置信息 字段:ownerId 指这个Portlet的所有者 字段:ownerType 字段:plid 页面Id 这个一定要弄清楚,因为每个页面的Portlet设置都可能不一样 字段:portletId 指哪个Portlet 字段:portletPrefence 指这个Portlet的个性化设置 在上图中,可以看到:plid = 11801 指My Community 1社区中的Home页面;portletId = 20 指 Document Library这个Portlet;portletPrefences = showSubfoldersfalserootFolderId0folderColumnsfolder,num-of-folders,num-of-documents,action保存这个Portlet的个性化设置信息。 社区、组织、地区、用户组、用户之间的关系 4 表Group_ 主要功能:保存了所有的社区、组织、地区、用户组、用户 如果用集合表示,Group = {社区,组织,地区,用户组,用户}; 字段:classNameId 代表来源于哪里:社区、组织、地区、用户组、用户; 字段:classPk 代表:当已经知道来源于哪里后,具体来源于哪条记录; 例如:classNameId = 8 代表: 组织; classPk = 17 代表:组织中的Liferay, Inc 字段:type 用来保存社区的类型,例如:type = COMMUNITY_OPEN,表示这是一个开放的社区。社区有Open和Close之分,如果为Open则用户可以在任何时间加入或者退出该社区,而不需要经过管理员的批准;如果为Close,要想增加新成员,只能通过管理员来新增用户。 特别注意:在此,Group_就是指社区,在Liferay以前的版本中,就把社区称为Group。 为什么在表Group_中还要保存每一个组织、每一个地区、每一个用户呢? 原因:因为每一个组织、每一个地区都可以看作一个社区;每一个用户,如果他/她具有Administrator Role或者Power User Role,那么他/她都有一个只属于自己的社区。 从上图可以看出: (1) 社区:groupId = 14 指 Guest 社区 groupId = 11720 指 My Community 1社区,界面如下图所示。 groupId = 12301 指 My Community 2社区 (2)组织:groupId = 18 指 Liferay, Inc组织 (这个组织可以看作一个社区) (3)地区:groupId = 44 指 Liferay Los Angeles地区(这个地区可以看作一个社区) (4)用户组:groupId = 11541 指Develop用户组 groupId = 11541 指 SofewareTest用户组 (5)用户:groupId = 83 指 userId = 2 这个用户(这个用户有一个自己的默认社区,从下图中可以看到默认社区的名称为My Community) 5 表ClassName_ 主要功能:通过该表可以找到Group_具体代表什么:用户,组织,地区还是用户组; 字段:classNameId 字段:value 查询语句: ------组------ select groupId, ClassName_.classNameId, classPK, name, value from Group_, ClassName_ where Group_.classNameId = ClassName_.classNameId order by value 查询结果: 在Group_表中groupId = 18,根据classNameId = 8在表ClassName_中可以找到对应的记录,在该记录中 value = com.liferay.portal.model.Organization,根据value值找到对应的表Organization_,根据classPK = 17,在表Organization_中找到organizationId = 17的记录,如下所示: 6 表Groups_Orgs 主要功能:存储组织(或地区)与社区的对应关系 (1)字段:groupId组Id(在此指社区Id,通过表Group可以找到,例如groupId = 11720代表My Community 1社区) (2)字段:organizationId 组织(或地区)Id(通过表Organization可以找到OrganizationId为43代表地区Liferay Los Angeles) 7 表Groups_UserGroups 主要功能:存储用户组与社区的对应关系 (1)字段:groupId组Id(在此指社区Id,通过表Group可以找到,例如groupId = 11720代表My Community 1社区) (2)字段:userGroupId用户组 Id(通过表UserGroup可以找到,例如 userGroupId = 11540 代表 Develop用户组) 8 表Users_Groups 主要功能:存储用户与社区的对应关系 (1)字段:groupId组Id(在此指社区Id,通过表Group可以找到,例如groupId = 11720代表My Community 1社区) (2)字段:userId用户组 Id(通过表User_可以找到,例如userId = 2 代表 test@liferay.com) 9 表Users_Orgs 主要功能:存储用户与组织(或地区)的对应关系; 字段:userId 代表: 用户Id(通过表User_可以找到,例如userId = 2 代表 test@liferay.com) 字段:organizationId 代表:组织(或地区)Id(通过表Organization可以找到OrganizationId为17代表组织Liferay, Inc.) 10 表Users_UserGroups 主要功能:存储用户与用户组的对应关系; 字段:userId 代表: 用户Id(通过表User_可以找到,例如userId = 2 代表 test@liferay.com) 字段:userGroupId 代表:用户组 Id(通过表UserGroup可以找到,例如 userGroupId = 11540 代表 Develop用户组) 总结: (1)社区下的组织、地区、用户组、用户如何存储? 通过表Groups_Orgs保存社区下的组织或地区; 通过表Groups_UserGroups保存社区下的用户组; 通过表表Users_Groups保存社区下的用户; (2)组织或地区下的用户如何存储? 通过表Users_Orgs保存组织(或地区)下的用户; (3)用户组的用户如何存储? 通过表Users_UserGroups保存用户组下的用户; 社区、组织、地区、用户组、用户与角色之间的关系 11 表Groups_Roles 主要功能:存储社区与角色的关系; 存储组织与角色的关系; 存储地区与角色的关系; 存储用户组与角色的关系; 字段:groupId 组(社区、组织)Id,例如 groupId = 11720 代表 My Community 1社区; groupId = 32 代表 Liferay Support 组织; groupId = 44 代表 Liferay Los Angeles 地区; groupId = 11541 代表 Develop用户组; 字段:roleId 角色Id,例如 roldId = 11533 代表 SupportMBAdmin角色; 特别注意:不要误以为组织与角色的关系存储在表OrgGroupRole中; 不要误以为地区与角色的关系存储在表OrgGroupRole中; 不要误以为用户组与角色的关系存储在表UserGroupRole中; 12 表OrgGroupRole 此表是Liferay 4.3.5之前的版本遗留下来的一个表,在Liferay 4.3.5版本中没有什么用,新版本中把组织和地区都看作一种社区,所以组织(或地区)与角色的关系同社区一样都保存在Groups_Roles表中;在老版本中通过OrgGroupRole将组织或地区映射到社区; 有待进一步研究; 13 表UserGroupRole 在此首先要解决一个问题:为什么在Liferay中将角色分为两类:type_ = 1 代表 Regular Role;type_ = 2 代表 Community Role? 默认的社区角色有三个:Community Administrator、Community Member、Community Owner; 如果在一个用户加入了一个社区,那么数据库中将有两个表会发生变化,其一会在Users_Groups表中新增一条记录,其二会在UserGroupRole表中新增一条记录。例如,用户Id = 888 加入了社区 My Community 1,那么会在Users_Groups表中新增一条记录,其二会在UserGroupRole表中新增一条记录,其社区角色为Community Member; 查询语句: select UserGroupRole.userId, Group_.name, Role_.name, Role_.type_ from UserGroupRole, Group_, Role_ where UserGroupRole.groupId = Group_.groupId and UserGroupRole.roleId = Role_.roleId 查询结果: 问题:为什么当组织、地区、用户组加入一个社区后,例如加入社区My Community 1,就没有对应的社区角色Community Ower? 主要功能:存储用户与社区角色之间的关系 字段:userId 用户Id; 字段:groupId 用户加入的社区Id; 字段:roleId 社区角色Id; 14 表Users_Roles 主要功能:存储用户与角色的关系; 字段:userId 用户Id,例如 userId = 888 代表 test.dlc.1@liferay.com用户; 字段:roleId 角色Id,例如 roleId = 10 代表 Administrator 角色; 角色、用户、社区、组织、地区、用户组与权限之间的关系 15 表Roles_Permissions 主要功能:存储角色的权限信息; 字段:roleId 角色Id; 字段:permissionId 权限Id; 在分配Roles Permissions之前,先弄清楚一点,我们要控制的资源来源于哪里? 查询语句: ------资源------ select resourceId, primKey, ResourceCode.codeId, name, scope from Resource_, ResourceCode where Resource_.codeId = ResourceCode.codeId and name = '19'and scope in (1,2) 查询结果: 从查询结果中,可以看到: Name = 19 指Message Boards Portlet资源 scope = 1指作用范围是Enterprise级 scope = 2指作用范围是Community级 如果我们选择Enterprise级,那么这个资源就是resourceId = 715,这是系统预先定义好的; 如果我们选择Community级,那么我们必须知道是哪个社区, primKey = 11720指My Community 1社区; primKey = 12301指My Community 2社区; primKey = 12703指hut(这个用户具有Power User角色)社区; primKey = 14指Guest社区; primKey = 18指Liferay,Inc(这是一个组织)社区; primKey = 83指test(这个用户具有Power User角色)社区; primKey = 890指Test DLC 1(这个用户具有Power User角色)社区; 只要社区能够添加Message Boards Portlet资源,就会在Resource_表中,新增一条与该社区对应的记录,可以说这也是系统预先定义好的。 例如,我们选择了11720社区,那么这个资源就是resourceId = 4102。 查询语句: ------角色权限------ select Role_.name, Permission_.resourceId, Permission_.ActionId, Resource_.codeId, ResourceCode.name, Resource_.primKey, ResourceCode.scope from Role_,Roles_Permissions, Permission_, Resource_, ResourceCode where Role_.roleId = Roles_Permissions.roleId and Roles_Permissions.permissionId = Permission_.permissionId and Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId --and --Groups_Permissions.groupId = 83 --order by ResourceCode.name order by ResourceCode.name, Resource_.primKey 查询结果: 示例1:对资源:name = 19 指 Message Boards Portlet赋权 角色:Regular Role:SupportMBAdmin 操作:Ban User 作用范围:scope = 1 企业级范围 数据库中的查询结果,如下图所示: 在Liferay中对应的界面,如下图所示: 示例2:对资源:name = 19 指 Message Boards Portlet赋权 角色:Regular Role:SupportMBAdmin 操作:ADD_CATEGORY、CONFIGURATION、VIEW 作用范围:scope = 2 社区级范围 所选择的社区:primKey = 11720 指 My Community 1社区 数据库中的查询结果,见上图; 在Liferay中对应的界面,如下图所示: 示例3:对资源:name = 19 指 Message Boards Portlet赋权 角色:Community Role:Community Test 操作:ADD_CATEGORY、BAN_USER、CONFIGURATION、VIEW 作用范围:scope = 3 社区级范围 数据库中的查询结果,如下图所示: 在Liferay中对应的界面,如下图所示: 赋权后,数据库中各相关表的变化如下: 第一:表Roles_Permissions的变化 请注意,在上图中可以看到: primKey = 0的4条记录,这是给Community Role:Community Test赋权时,scope不能选择Enterprise或Community; primKey = 1的1条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Enterprise; primKey = 11720的3条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Community,再选择My Community 1; primKey = 12301的1条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Community,再选择My Community 2; 第二:表Resource_的变化: 会在该表中增加一条记录,以示例3的赋权为例 第三:表Permission_的变化: 会在该表中增加4条记录,以示例3的赋权为例 16 表Users_Permissions 主要功能:存储用户的权限信息 字段:userId 用户Id; 字段:permissionId 权限Id; 查询语句: ------用户权限------ select User_.emailAddress,Users_Permissions.userId, Permission_.resourceId, Permission_.ActionId, Resource_.codeId, ResourceCode.name, Resource_.primKey, ResourceCode.scope from User_,Users_Permissions, Permission_, Resource_, ResourceCode where User_.userId = Users_Permissions.userId and Users_Permissions.permissionId = Permission_.permissionId and Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId and Users_Permissions.userId = 2 order by ResourceCode.name, Resource_.primKey 查询结果: 从上图中可以看出: 用户:test@liferay.com 资源:com.liferay.portlet.documentlibrary.model.DLFolder中的MyDoc 操作:ADD_DOCUMENT、ADD_FOLDER、ADD_SHORTCUT、DELETE、PERMISSIONS、UPDATE、VIEW 在Liferay中对应的界面,如下图所示: 请注意在该表中,所有权限的作用的范围是Individual(scope = 4),只有给用户直接赋权时,权限信息才会存储在该表中。 那么在什么地方可以对用户直接赋权? 示例1:对社区、组织、地区(组织和地区也可看作社区)中页面配置权限 数据库中的查询结果,如下图所示: 在Liferay中对应的界面,如下图所示: 示例2:对【Enterprise Admin】Portlet中的资源角色赋权 数据库中的查询结果,如下图所示: primKey = 11533 指 Regular Role:SupportMBAdmin 在Liferay中对应的界面,如下图所示: 示例3:对某篇自己发布的文章赋权 数据库中的查询结果,如下图所示: primKey = 11573 指 articleId = 11571 title = MyFirstArticle 的文章 在Liferay中对应的界面,如下图所示: 示例4:给用户分配权限 用户:userId = 888 test.dlc.1@liferay.com 资源:Message Boards Portlet 操作:Add Category、View 作用范围:scope = 4 Individual级 在数据库中查询结果,如下图所示: 在Liferay中对应的界面,如下图所示: 从上图中可以看到,primKey = 11801_LAYOUT_19 指My Community 1社区下的Home页面;name = 19指Message Boards Portlet;scope = 4指Individual级; 在Liferay中对应的界面,如下图所示: 17 表Groups_Permissions 主要功能: 存储社区的权限信息,存储用户组的权限信息 字段:groupId 社区(或者组织、地区、用户组、社区)Id; 字段:permissionId 权限Id; (1)存储社区的权限信息,社区:83,如下图所示: 在图中可以看到一个资源name = com.liferay.portlet.documentlibrary.model.DLFolder,根据资源名称找到表 DLFolder,再根据primKey = 11549从表DLFolder中可以找到资源的详细信息:这是一个name = ‘My Doc’的文件夹;对资源的操作有:ADD_DOCUMENT、ADD_FOLDER、ADD_SHORTCUT、VIEW 查询语句: ------社区权限------ select Group_.name,Groups_Permissions.groupId, Permission_.permissionId, Permission_.resourceId, Permission_.ActionId, Resource_.codeId, ResourceCode.name, Resource_.primKey, ResourceCode.scope from Group_,Groups_Permissions, Permission_, Resource_, ResourceCode where Group_.groupId = Groups_Permissions.groupId and Groups_Permissions.permissionId = Permission_.permissionId and Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId and Groups_Permissions.groupId = 11720 order by ResourceCode.name, Resource_.primKey 查询结果: 在Liferay中的对应的界面,如下图所示: (2)存储用户组的权限信息 用户组:Develop 在UserGroup表中userGroupId = 11540,在Group_表中 groupId = 11541 资源:Message Boards Portlet 操作:Add Category、Ban User、CONFIGURATION 作用范围: scope = 4 Individual级 查询语句: ------用户组权限------ select Group_.name as GroupName,Groups_Permissions.groupId, Permission_.permissionId, Resource_.resourceId, Permission_.ActionId, ResourceCode.codeId, ResourceCode.name, Resource_.primKey, ResourceCode.scope from Group_,Groups_Permissions, Permission_, Resource_, ResourceCode where Group_.groupId = Groups_Permissions.groupId and Groups_Permissions.permissionId = Permission_.permissionId and Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId and Groups_Permissions.groupId = 11541 order by ResourceCode.name, Resource_.primKey 查询结果: 在Liferay中对应的界面,如下图所示: 18 表OrgGroupPermission 主要功能:存储组织/地区的权限信息 字段:organizationId 组织(地区)Id; 字段:groupId 社区Id 一般情况下,我们是把个别级的权限分配给组织或地区,例如:我们在My Community 1社区下的Home页面中,对Message Boards Porrlet分配权限,我们指定groupId = 11720就知道这个Messge Boards Portlet在My Commnunity 1社区,这样就能和其他的社区区别开来。例如,我们在My Community 1社区和My Community 2社区,都对Message Boards Portlet给组织Liferay, Inc分配了权限,那么我们根据这个groupId就知道是在哪个社区。 如果在同一个社区中有多个页面,每个页面都有相同的Portlet,怎么办?例如,在My Community 1社区下有两个页面,每个页面都有一个Message Boards Portlet,此时我们根据Resource_表中的字段primKey的值来区分在哪个页面,primKey = 11801_LAYOUT_19 指 My Community 1社区下的Home页面。 字段:permissionId 权限Id; 查询语句: ------组织/地区权限------ select Organization_.name, Group_.name, Permission_.permissionId, Resource_.resourceId, Permission_.ActionId, ResourceCode.codeId, ResourceCode.name, Resource_.primKey, ResourceCode.scope from Organization_, OrgGroupPermission, Permission_, Resource_, ResourceCode, Group_ where Organization_.organizationId = OrgGroupPermission.organizationId and OrgGroupPermission.permissionId = Permission_.permissionId and Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId and OrgGroupPermission.groupId = Group_.groupId order by ResourceCode.name, Resource_.primKey 查询结果: 示例1:给组织分配权限 组织:organizationId = 17 Liferay, Inc 资源:Message Boards Portlet 操作:Ban User 在数据库中的查询结果,如下图所示: 从上图中可以看出,name = My Community 1指在My Community 1社区;primKey = 11801_LAYOUT_19 指在Home页面;scope = 4指作用范围为Individual,只作用于当前这个Portlet对象。 在Liferay中的界面,如下图所示: 示例2:给地区分配权限 组织:organizationId = 43 Liferay Los Angeles 资源:Message Boards Portlet 操作:Add Category 在数据库中的查询结果,如下图所示: 在Liferay中的界面,如下图所示: 19 表Permission_ 主要功能:存储权限信息,即对哪些资源可以进行哪些操作 (1) 权限的基本信息来源于XML文档: 其初始化记录来源于:${Liferay}\portal\portal-impl\classes\resource-actions目录下的: portal.xml及其他XML文件,例如documentlibrary.xml: com.liferay.portlet.documentlibrary.model.DLFileEntry 20 ADD_DISCUSSION DELETE PERMISSIONS UPDATE VIEW ADD_DISCUSSION VIEW VIEW ADD_DISCUSSION UPDATE 查询语句: ------权限------ select permissionId, actionId, Resource_.resourceId, primKey, ResourceCode.codeId, name, scope from Permission_, Resource_, ResourceCode where Permission_.resourceId = Resource_.resourceId and Resource_.codeId = ResourceCode.codeId 查询结果: (2)权限信息来源于:在页面中添加了一个Message Boards Portlet资源;在Message Boards Portlet中增加了一个MB Category;给角色SupportMBAdmin分配了权限,从数据库中查询出来的结果,如下图所示: 请注意,在上图中可以看到: primKey = 0的4条记录,这是给Community Role:Community Test赋权时,scope不能选择Enterprise或Community; primKey = 1的1条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Enterprise; primKey = 11720的3条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Community,再选择My Community 1; primKey = 12301的1条记录,这是给Regular Role:SupportMBAdmin赋权时,scope选择Community,再选择My Community 2; 反过来想一想:如果我们要对Message Boards Portlet中的一个MB Category赋权,那么我们对该资源能进行哪些操作了,这些信息就来源于表Permission_中,其界面如下图所示: 这些信息在数据库中,如下图所示: 如果我们社区83中的Message Borads Portlet赋权(使用该Portlet顶部工具栏中配置icon),那么我们对该资源能进行哪些操作了,这些信息就来源于表Permission_中,其界面如下图所示: 这些信息在数据库中,如下图所示: 20 表ResourceCode 主要功能:存储所有的注册资源 在此,资源分为两类: (1)Portlet资源,例如:name = 19 表示Message Boards Portlet资源; (2)Model资源,例如:name = com.liferay.portlet.messageboards.model.MBCategory 表示MBCategory模型资源; 来源于:${Liferay}\portal\portal-impl\classes\resource-actions目录下的:portal.xml及其他XML文件;${Tomcat}\webapps\WEB-INF\liferay-portlet.xml,需要仔细地查看源代码,才能彻底弄清楚scope是怎么确定的。 字段:codeId 资源代码 字段:name 资源名称(有可能是Portlet资源,也可能是Model资源) 字段:scope 作用范围 Scope = 1 用于Regular Role,表示Enterprise范围,当前企业的所有社区的所有页面; Scope = 2 用于 Regular Role,表示Community范围,当前社区的所有页面; Scope = 3 用于 Community Role,作用范围Community,当前社区的所有页面; Scope = 4 用于User Organization Location UserGroup Community,作用范围Individual,当前页面,当前页面下的对象; 同一种资源,按Scope取值不同,有三种作用范围;Enterprise Community Page(Individual)。 查询语句:select * from dbo.ResourceCode order by name,scope 查询结果: 21 表Resource_ 主要功能:存储所有的资源 字段:resourceId 资源Id 字段:codeId 资源代码 字段:primKey 通过它可以找到具体的资源 在此,资源分为三类: (1) Portlet 资源 来源于表ResourceCode。 通过codeId 可以找到是哪个Portlet资源,例如 codeId = 216 表示 Message Boards Portlet资源。 通过primKey可以找到该Portlet资源在哪个社区,例如:primKey = 83 指 拥有 Administrator Role的用户test@liferay.com的默认社区【My Community】,name = 19 指 Message Boards Portlet资源,说明有一个Message Boards Portlet资源在83这个社区。 只要在某个社区的某个页面中,增加了一个Portlet,那么就会在Resource表中增加一条相应的记录;如果删除了该Portlet,就会在该表中删除相应的记录。从下述查询结果中,可以看到在4个页面中:plid = {11802 , 12801, 2029, 86}有一个Message Boards Portlet。 在给角色赋权时,如果作用范围选择了社区,那么也会在表Resource_中也会增加相应的记录。例如:对资源Message Boards Portlet,给角色SupportMBAdmin分配权限时,选择了社区My Community 1和My Community 2。 在数据库中查询结果,如下图所示: 在Liferay中对应界面,如下图所示: (2)Java Class(Model 资源) 来源于表ResourceCode,通过codeId 可以找到 例如 codeId = 714 表示 MBCategory模型资源; (3)Files 例如一篇文章,一幅图片,一条消息等,通过Resource_表中的name可以 知道是哪个模型资源,每一个模型资源在数据库中都有对应的一个表,找到对应的表后,根据Resource_表中的primKey找到具体的Files,可以看到更详细的信息; 例如:在Resource_表中,有如下一条记录: 查询语句: ------资源------ select resourceId, primKey, ResourceCode.codeId, name, scope from Resource_, ResourceCode where Resource_.codeId = ResourceCode.codeId and resourceId = 4002 根据name = com.liferay.portlet.messageboards.model.MBCategory找到表MBCategory; 根据primKey = 12101,在表MBCategory中找到如下这条记录,这条记录就表示一个文件。 对于Model资源来说,通过primKey可以找到该资源的详细信息; 对于Portlet资源来说,通过primKey可以找到该资源在哪个页面; 表ResourceCode与表Resource_的区别: (1)表ResourceCode存储的是Portlets 资源和模型资源; (2)表Resource中存储了所有的资源,任何资源都存储在这里,在Permission_表中的Resourece就来源于此表; 总结: (1)用户权限与角色权限冲突的问题:如果用户u1被指派给角色r1,角色r1拥有权限{p1,p2,p3},此时用户也将拥有权限{p1,p2,p3},若再给用户分配权限p1或p2或p3则会产生冲突,解决办法:不允许把权限分配给用户u1; (2) 用户、组织、地区、用户组、社区、角色 22 表User_ 23 表Organization_ 主要功能:存储组织和地区的信息; 字段:organizationId 组织(或地区)Id; 字段:parentOrganizationId 父组织Id; 字段:name 组织(或地区)名称; 字段:location 0|组织 1|地区 字段:statusId 12017|Full Member 12018|Provisional Member 字段:recursable 是否递归授权 意即是否将在组织的权限继承给其他组织、用户等 0|否 1|是 24 表UserGroup 主要功能:存储用户组的信息 字段:userGroupId 用户组Id ; 字段:parentUserGroupId 父用户组Id,特别注意,在该表中,虽然存在这个字段,但实际上没有什么用,因为用户组之间并不存在层次关系; 字段:name 用户组名称; 25 表Role_ 主要功能:存储角色的信息 字段:roleId 角色Id; 字段:name 角色名称; 字段:type_ 角色类型: type_ = 1 代表 Regular Role; type_ = 2 代表 Community Role; 与企业、组织、地区、用户有关的表 26 表Account_ 主要功能:存储企业信息 字段:companyId 字段:parentAccountId 字段:name 字段:legalName 字段:legalId 字段:legalType 字段:sicCode 字段:tickerSymbol 字段:industry 字段:type_ 字段:size_ 27 表Company 主要功能:存储企业信息 字段:companyId 字段:webId 字段:key_ 加密字符串 字段:virtualHost 虚拟主机名 字段:mx 指Mail Domain 字段:logoId 首页顶部图标,根据logoId,从Image表中,可以找到详细信息 注意:Liferay4.3.5以前的老版本中有关【Admin】Portlet的大部分功能都已经迁移到【Enterprise Admin】Portlet中去了。 28 表Address 29 表Contact_ 30 表EmailAddress 31 表Phone 32 表Region 文档库管理 33 表DLFolder 34 表DLFileEntry 35 表DLFileRank 36 表DLFileShortcut 37 表DLFileVersion 38 表RatingsEntry 39 表RatingsStats 40 表JournalArticle 41 表JournalArticleImage 42 表JournalArticleResource 43 表JournalContentSearch 44 表JournalStructure 45 表JournalTemplate 公告板(消息板) 46 表MBBan 主要功能:存储被屏蔽用户的信息 字段:groupId Message Boards Portlet所在的社区 字段:userId 屏蔽者,由他/她去屏蔽别人 字段:banUserId 被屏蔽的用户 用户:userId = 2屏蔽用户:userId = 888,在Liferay中界面如下图所示: 用户888被屏蔽后,再浏览Message Boards Portlet时的界面,如下图所示: 47 表MBCategory 主要功能:存储栏目信息 字段:groupId 指明该栏目在哪个社区; 字段:parentCategoryId 父栏目Id; 字段:lastPostDate 指该栏目下的消息的最后发布时间 48 表MBDiscussion 49 表MBMessage 50 表MBMessageFlag 51 表MBStatsUser 52 表MBThread 字段:priority 优先级 1.0:Announcement 2.0:Sticky 3.0 Urgent 53 表Subscription 主要功能:可以订阅一个栏目Category或者一个主题Thread,它的信息保存在该表中。订阅的意思:只要栏目Category中发布了消息,或在主题Thread中发布了消息,就会通过电子邮件(当前登录用户的电子邮件)发送给用户。 字段:classNameId 指明来源于哪个表,例如classNameId = 10058,通过ClassName_表可以找到 value = com.liferay.portlet.messageboards.model.MBCategory 指MBCategory表 字段:classPK 在MBCategory表中,根据classPK = 12101,可以找到: 如何修改与订阅绑定的电子邮件信息,点击当前Message Boards Portlet右上角的【Configuration】ICON,如下图所示: 详细配置过程请参考liferay_4_portal_administration_guide第102页Configuring Subscription Emails

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
1 人已下载

下载文档

相关文档