001    /**
002     * Copyright (c) 2000-present 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.announcements.service.permission;
016    
017    import com.liferay.announcements.kernel.model.AnnouncementsEntry;
018    import com.liferay.announcements.kernel.service.AnnouncementsEntryLocalServiceUtil;
019    import com.liferay.portal.kernel.exception.PortalException;
020    import com.liferay.portal.kernel.model.Layout;
021    import com.liferay.portal.kernel.model.ResourceConstants;
022    import com.liferay.portal.kernel.model.impl.VirtualLayout;
023    import com.liferay.portal.kernel.security.auth.PrincipalException;
024    import com.liferay.portal.kernel.security.permission.PermissionChecker;
025    import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
026    import com.liferay.portal.kernel.service.ResourcePermissionLocalServiceUtil;
027    import com.liferay.portal.kernel.service.permission.PortletPermissionUtil;
028    
029    /**
030     * @author Raymond Augé
031     */
032    public class AnnouncementsEntryPermission {
033    
034            public static void check(
035                            PermissionChecker permissionChecker, AnnouncementsEntry entry,
036                            String actionId)
037                    throws PortalException {
038    
039                    if (!contains(permissionChecker, entry, actionId)) {
040                            throw new PrincipalException.MustHavePermission(
041                                    permissionChecker, AnnouncementsEntry.class.getName(),
042                                    entry.getEntryId(), actionId);
043                    }
044            }
045    
046            public static void check(
047                            PermissionChecker permissionChecker, Layout layout, String name,
048                            String actionId)
049                    throws PortalException {
050    
051                    if (!contains(permissionChecker, layout, name, actionId)) {
052                            throw new PrincipalException.MustHavePermission(
053                                    permissionChecker, AnnouncementsEntry.class.getName(), name,
054                                    actionId);
055                    }
056            }
057    
058            public static void check(
059                            PermissionChecker permissionChecker, long entryId, String actionId)
060                    throws PortalException {
061    
062                    if (!contains(permissionChecker, entryId, actionId)) {
063                            throw new PrincipalException.MustHavePermission(
064                                    permissionChecker, AnnouncementsEntry.class.getName(), entryId,
065                                    actionId);
066                    }
067            }
068    
069            public static void check(
070                            PermissionChecker permissionChecker, long plid, String portletId,
071                            String actionId)
072                    throws PortalException {
073    
074                    if (!contains(permissionChecker, plid, portletId, actionId)) {
075                            throw new PrincipalException.MustHavePermission(
076                                    permissionChecker, AnnouncementsEntry.class.getName(),
077                                    portletId, actionId);
078                    }
079            }
080    
081            public static boolean contains(
082                            PermissionChecker permissionChecker, AnnouncementsEntry entry,
083                            String actionId)
084                    throws PortalException {
085    
086                    if (permissionChecker.hasOwnerPermission(
087                                    entry.getCompanyId(), AnnouncementsEntry.class.getName(),
088                                    entry.getEntryId(), entry.getUserId(), actionId)) {
089    
090                            return true;
091                    }
092    
093                    return permissionChecker.hasPermission(
094                            entry.getGroupId(), AnnouncementsEntry.class.getName(),
095                            entry.getEntryId(), actionId);
096            }
097    
098            public static boolean contains(
099                    PermissionChecker permissionChecker, Layout layout, String portletId,
100                    String actionId) {
101    
102                    if (layout instanceof VirtualLayout) {
103                            VirtualLayout virtualLayout = (VirtualLayout)layout;
104    
105                            layout = virtualLayout.getSourceLayout();
106                    }
107    
108                    boolean useDefaultPortletPermissions = false;
109    
110                    String primKey = PortletPermissionUtil.getPrimaryKey(
111                            layout.getPlid(), portletId);
112    
113                    int count =
114                            ResourcePermissionLocalServiceUtil.getResourcePermissionsCount(
115                                    permissionChecker.getCompanyId(), portletId,
116                                    ResourceConstants.SCOPE_INDIVIDUAL, primKey);
117    
118                    if (count == 0) {
119                            useDefaultPortletPermissions = true;
120                    }
121    
122                    if (useDefaultPortletPermissions) {
123                            primKey = portletId;
124                    }
125    
126                    return permissionChecker.hasPermission(
127                            layout.getGroupId(), portletId, primKey, actionId);
128            }
129    
130            public static boolean contains(
131                            PermissionChecker permissionChecker, long entryId, String actionId)
132                    throws PortalException {
133    
134                    AnnouncementsEntry entry = AnnouncementsEntryLocalServiceUtil.getEntry(
135                            entryId);
136    
137                    return contains(permissionChecker, entry, actionId);
138            }
139    
140            public static boolean contains(
141                    PermissionChecker permissionChecker, long plid, String name,
142                    String actionId) {
143    
144                    Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
145    
146                    return contains(permissionChecker, layout, name, actionId);
147            }
148    
149    }