在Liferay 6.2中使用Webservices检查权限

时间:2015-03-23 13:55:34

标签: web-services liferay liferay-6

我正在尝试使用liferay网络服务。 我想检查用户是否拥有资源的权限(添加/更新/删除),但我没有找到任何方法来执行此操作。

我发现liferay在Web服务方法中实现了权限检查。 通过这种方式,当用户尝试执行他未获得许可的操作时,我可以显示错误消息。

但我认为不允许他而不是显示错误信息会更好。

对于前者: 用户无权添加文档。 Webservice调用在尝试添加文档时会抛出异常。 在我看来,隐藏添加按钮比显示错误更好。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

    PermissionChecker permissionChecker = getPermissionChecker();

    if(!permissionChecker.hasPermission(groupId, permissionModelKey, groupId, permissionKey))
            throw new PortalException("You don't have the required permissions!");

permissionModelKey是资源的型号名称(例如:com.your.namespace.model.YourClass),而权利密钥是一个操作密钥,可以在resource-actions/default.xml中定义。

将此作为YourClassServiceImpl服务方法的第一行使用,如果用户没有正确的权限(不要使用管理员用户对其进行测试),则会抛出{{1} }。或者如果您愿意,您可以优雅地退出。这仅取决于您希望如何处理该用例。

希望这有帮助。

答案 1 :(得分:0)

我没有时间详细说明,但您可以使用hasResourcePermission中的ResourcePermissionLocalServiceUtil来解决您的问题:

public static boolean hasResourcePermission(long companyId,
                                            String name,
                                            int scope,
                                            String primKey,
                                            long roleId,
                                            String actionId)
                                     throws PortalException,
                                            SystemException

如果角色在作用域中具有对该类型资源执行操作的权限,则返回true。

根据范围,primKey的值将具有不同的含义。有关更多信息,请参阅ResourcePermissionImpl。

Parameters:
companyId - the primary key of the company
name - the resource's name, which can be either a class name or a portlet ID
scope - the scope
primKey - the primary key
roleId - the primary key of the role
actionId - the action ID
Returns:
true if the role has permission to perform the action on the resource; false otherwise
Throws:
PortalException - if a role with the primary key or a resource action with the name and action ID could not be found
SystemException - if a system exception occurred

链接到javadocs:hasResourcePermission