如何在创建时动态地为网站页面分配权限

suy*_*ash 4 liferay liferay-6

在Liferay中添加网站页面时,会VIEW自动为Owner角色,Guest角色和Site Member角色分配权限.

是否可以在VIEW创建页面时动态地将权限分配给自定义角色,而不是VIEW从站点页面的"管理权限"选项卡手动分配权限?

suy*_*ash 6

其中一种可能的方法是使用LayoutListenervia hook

为此,您需要创建钩子(门户网站属性)并覆盖以下属性:

value.object.listener.com.liferay.portal.model.Layout
Run Code Online (Sandbox Code Playgroud)

请参阅以下示例:

value.object.listener.com.liferay.portal.model.Layout=com.smb.mypermissions.hook.listeners.LayoutListener
Run Code Online (Sandbox Code Playgroud)

LayoutListener是在包com.smb.mypermissions.hook.listeners下创建的自定义类,以覆盖默认值LayoutListener.

本课程签名: public class LayoutListener extends BaseModelListener<Layout>

现在覆盖该方法

public void onAfterCreate(Layout model)throws ModelListenerException
Run Code Online (Sandbox Code Playgroud)

要为角色​​分配权限,请使用以下一个班轮:

ResourcePermissionLocalServiceUtil.setResourcePermissions(
    companyId, Layout.class.getName(),
    ResourceConstants.SCOPE_INDIVIDUAL,
    String.valueOf(primKey), role.getRoleId(),
    new String[] {
        ActionKeys.VIEW
    });
Run Code Online (Sandbox Code Playgroud)

可以从哪里获取角色,RoleLocalServiceUtil并且primkey是页面唯一ID即plid

long primKey = model.getPlid();

long companyId = model.getGroup().getCompanyId();

Role role = RoleLocalServiceUtil.fetchRole(companyId, "<Your Role name here>");
Run Code Online (Sandbox Code Playgroud)