【发布时间】:2013-04-23 12:05:12
【问题描述】:
在 Liferay 中添加站点页面时,会自动为 Owner 角色、Guest 角色和 Site Member 角色分配 VIEW 权限。
是否可以在创建页面时将VIEW 权限动态分配给自定义角色,而不是从站点页面的“管理权限”选项卡手动分配VIEW 权限?
【问题讨论】:
在 Liferay 中添加站点页面时,会自动为 Owner 角色、Guest 角色和 Site Member 角色分配 VIEW 权限。
是否可以在创建页面时将VIEW 权限动态分配给自定义角色,而不是从站点页面的“管理权限”选项卡手动分配VIEW 权限?
【问题讨论】:
一种可能的方法是通过钩子使用LayoutListener
为此,您需要创建钩子(门户属性)并覆盖以下属性:
value.object.listener.com.liferay.portal.model.Layout
请看下面的例子:
value.object.listener.com.liferay.portal.model.Layout=com.smb.mypermissions.hook.listeners.LayoutListener
这里的LayoutListener 是在包com.smb.mypermissions.hook.listeners 下创建的自定义类,用于覆盖默认的LayoutListener。
此课程的签名:public class LayoutListener extends BaseModelListener<Layout>
现在重写方法
public void onAfterCreate(Layout model)throws ModelListenerException
要为角色分配权限,请使用以下一行:
ResourcePermissionLocalServiceUtil.setResourcePermissions(
companyId, Layout.class.getName(),
ResourceConstants.SCOPE_INDIVIDUAL,
String.valueOf(primKey), role.getRoleId(),
new String[] {
ActionKeys.VIEW
});
其中角色可以从RoleLocalServiceUtil 获得,primkey 是页面唯一ID,即plid
long primKey = model.getPlid();
long companyId = model.getGroup().getCompanyId();
Role role = RoleLocalServiceUtil.fetchRole(companyId, "<Your Role name here>");
【讨论】: