Java tutorial
/** * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. * * The contents of this file are subject to the terms of the Liferay Enterprise * Subscription License ("License"). You may not use this file except in * compliance with the License. You can obtain a copy of the License by * contacting Liferay, Inc. See the License for the specific language governing * permissions and limitations under the License, including but not limited to * distribution rights of the Software. * * * */ package com.cd.learning.hook; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.staging.permission.StagingPermissionUtil; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.PropsKeys; import com.liferay.portal.kernel.util.PropsUtil; import com.liferay.portal.security.auth.PrincipalException; import com.liferay.portal.security.permission.ActionKeys; import com.liferay.portal.security.permission.PermissionChecker; import com.liferay.portal.util.PortletKeys; import com.liferay.portlet.messageboards.NoSuchCategoryException; import com.liferay.portlet.messageboards.model.MBCategory; import com.liferay.portlet.messageboards.model.MBCategoryConstants; import com.liferay.portlet.messageboards.service.MBBanLocalServiceUtil; import com.liferay.portlet.messageboards.service.MBCategoryLocalServiceUtil; /** * @author Brian Wing Shun Chan * @author Mate Thurzo */ public class MBCategoryPermission { public static void check(PermissionChecker permissionChecker, long groupId, long categoryId, String actionId) throws PortalException, SystemException { if (!contains(permissionChecker, groupId, categoryId, actionId)) { throw new PrincipalException(); } } public static void check(PermissionChecker permissionChecker, long categoryId, String actionId) throws PortalException, SystemException { if (!contains(permissionChecker, categoryId, actionId)) { throw new PrincipalException(); } } public static void check(PermissionChecker permissionChecker, MBCategory category, String actionId) throws PortalException, SystemException { if (!contains(permissionChecker, category, actionId)) { throw new PrincipalException(); } } public static boolean contains(PermissionChecker permissionChecker, long groupId, long categoryId, String actionId) throws PortalException, SystemException { if ((categoryId == MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) || (categoryId == MBCategoryConstants.DISCUSSION_CATEGORY_ID)) { return MBPermission.contains(permissionChecker, groupId, actionId); } MBCategory category = MBCategoryLocalServiceUtil.getCategory(categoryId); return contains(permissionChecker, category, actionId); } public static boolean contains(PermissionChecker permissionChecker, long categoryId, String actionId) throws PortalException, SystemException { MBCategory category = MBCategoryLocalServiceUtil.getCategory(categoryId); return contains(permissionChecker, category, actionId); } public static boolean contains(PermissionChecker permissionChecker, MBCategory category, String actionId) throws PortalException, SystemException { if (MBBanLocalServiceUtil.hasBan(category.getGroupId(), permissionChecker.getUserId())) { return false; } if (actionId.equals(ActionKeys.ADD_CATEGORY)) { actionId = ActionKeys.ADD_SUBCATEGORY; } Boolean hasPermission = StagingPermissionUtil.hasPermission(permissionChecker, category.getGroupId(), MBCategory.class.getName(), category.getCategoryId(), PortletKeys.MESSAGE_BOARDS, actionId); if (hasPermission != null) { return hasPermission.booleanValue(); } if (actionId.equals(ActionKeys.VIEW) && GetterUtil.getBoolean(PropsUtil.get(PropsKeys.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE))) { try { long categoryId = category.getCategoryId(); while (categoryId != MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) { category = MBCategoryLocalServiceUtil.getCategory(categoryId); if (!_hasPermission(permissionChecker, category, actionId)) { return false; } categoryId = category.getParentCategoryId(); } } catch (NoSuchCategoryException nsce) { if (!category.isInTrash()) { throw nsce; } } return true; } return _hasPermission(permissionChecker, category, actionId); } private static boolean _hasPermission(PermissionChecker permissionChecker, MBCategory category, String actionId) { if (permissionChecker.hasOwnerPermission(category.getCompanyId(), MBCategory.class.getName(), category.getCategoryId(), category.getUserId(), actionId) || permissionChecker.hasPermission(category.getGroupId(), MBCategory.class.getName(), category.getCategoryId(), actionId)) { return true; } return false; } }