001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.mobiledevicerules.service.permission;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.staging.permission.StagingPermissionUtil;
020    import com.liferay.portal.security.auth.PrincipalException;
021    import com.liferay.portal.security.permission.PermissionChecker;
022    import com.liferay.portal.util.PortletKeys;
023    import com.liferay.portlet.mobiledevicerules.model.MDRRuleGroupInstance;
024    import com.liferay.portlet.mobiledevicerules.service.MDRRuleGroupInstanceLocalServiceUtil;
025    
026    /**
027     * @author Michael C. Han
028     */
029    public class MDRRuleGroupInstancePermissionImpl
030            implements MDRRuleGroupInstancePermission {
031    
032            @Override
033            public void check(
034                            PermissionChecker permissionChecker, long ruleGroupInstanceId,
035                            String actionId)
036                    throws PortalException, SystemException {
037    
038                    if (!contains(permissionChecker, ruleGroupInstanceId, actionId)) {
039                            throw new PrincipalException();
040                    }
041            }
042    
043            @Override
044            public void check(
045                            PermissionChecker permissionChecker,
046                            MDRRuleGroupInstance ruleGroupInstance, String actionId)
047                    throws PortalException {
048    
049                    if (!contains(permissionChecker, ruleGroupInstance, actionId)) {
050                            throw new PrincipalException();
051                    }
052            }
053    
054            @Override
055            public boolean contains(
056                            PermissionChecker permissionChecker, long ruleGroupInstanceId,
057                            String actionId)
058                    throws PortalException, SystemException {
059    
060                    MDRRuleGroupInstance ruleGroupInstance =
061                            MDRRuleGroupInstanceLocalServiceUtil.getMDRRuleGroupInstance(
062                                    ruleGroupInstanceId);
063    
064                    return contains(permissionChecker, ruleGroupInstance, actionId);
065            }
066    
067            @Override
068            public boolean contains(
069                    PermissionChecker permissionChecker,
070                    MDRRuleGroupInstance ruleGroupInstance, String actionId) {
071    
072                    Boolean hasPermission = StagingPermissionUtil.hasPermission(
073                            permissionChecker, ruleGroupInstance.getGroupId(),
074                            MDRRuleGroupInstance.class.getName(),
075                            ruleGroupInstance.getRuleGroupInstanceId(),
076                            PortletKeys.MOBILE_DEVICE_SITE_ADMIN, actionId);
077    
078                    if (hasPermission != null) {
079                            return hasPermission.booleanValue();
080                    }
081    
082                    return permissionChecker.hasPermission(
083                            ruleGroupInstance.getGroupId(),
084                            MDRRuleGroupInstance.class.getName(),
085                            ruleGroupInstance.getRuleGroupInstanceId(), actionId);
086            }
087    
088    }