/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/podcasts/trunk/podcasts-impl/impl/src/java/org/sakaiproject/component/app/podcasts/PodcastPermissionsServiceImpl.java $
* $Id: PodcastPermissionsServiceImpl.java 120353 2013-02-21 15:58:11Z matthew.buckett@it.ox.ac.uk $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.component.app.podcasts;
import static org.sakaiproject.component.app.podcasts.Utilities.checkSet;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import org.sakaiproject.api.app.podcasts.PodcastPermissionsService;
import org.sakaiproject.authz.api.Member;
import org.sakaiproject.authz.api.SecurityService;
import org.sakaiproject.content.api.ContentEntity;
import org.sakaiproject.content.api.ContentHostingService;
import org.sakaiproject.content.api.GroupAwareEntity;
import org.sakaiproject.content.api.GroupAwareEntity.AccessMode;
import org.sakaiproject.exception.IdUnusedException;
import org.sakaiproject.site.api.Group;
import org.sakaiproject.site.api.Site;
import org.sakaiproject.site.api.SiteService;
import org.sakaiproject.time.api.TimeService;
import org.sakaiproject.tool.api.SessionManager;
import org.sakaiproject.tool.api.ToolManager;
public class PodcastPermissionsServiceImpl implements PodcastPermissionsService {
private ContentHostingService contentHostingService;
private SecurityService securityService;
private ToolManager toolManager;
private SessionManager sessionManager;
private TimeService timeService;
private SiteService siteService;
public void setContentHostingService(ContentHostingService contentHostingService) {
this.contentHostingService = contentHostingService;
}
public void setSecurityService(SecurityService securityService) {
this.securityService = securityService;
}
public void setToolManager(ToolManager toolManager) {
this.toolManager = toolManager;
}
public void setSessionManager(SessionManager sessionManager) {
this.sessionManager = sessionManager;
}
public void setTimeService(TimeService timeService) {
this.timeService = timeService;
}
public void setSiteService(SiteService siteService) {
this.siteService = siteService;
}
public void init() {
checkSet(contentHostingService, "contentHostingService");
checkSet(securityService, "securityService");
checkSet(toolManager, "toolManager");
checkSet(sessionManager, "sessionManager");
checkSet(timeService, "timeService");
checkSet(siteService, "siteService");
}
/**
* Determines if authenticated user has 'read' access to podcast collection folder
*
* @param id
* The id for the podcast collection folder
*
* @return
* TRUE - has read access, FALSE - does not
*/
public boolean allowAccess(String id) {
return contentHostingService.allowGetCollection(id);
}
/**
* Determine whether user and update the site
*
* @param siteId
* The siteId for the site to test
*
* @return
* True if can update, False otherwise
*/
public boolean canUpdateSite() {
return canUpdateSite(getSiteId());
}
/**
* Determine whether user and update the site
*
* @param siteId
* The siteId for the site to test
*
* @return True
* True if can update, False otherwise
*/
public boolean canUpdateSite(String siteId) {
return securityService.unlock(UPDATE_PERMISSIONS, "/site/"+ siteId);
}
/**
* Returns TRUE if current user has function (permission) passed in or site.upd, FALSE otherwise.
*/
public boolean hasPerm(String function, String resourceId) {
return hasPerm(function, resourceId, getSiteId());
}
/**
* Returns TRUE if current user has function (permission) passed in or site.upd, FALSE otherwise.
*/
public boolean hasPerm(String function, String resourceId, String siteId) {
if (canUpdateSite(siteId)) {
return true;
}
else {
if (resourceId != null) {
return securityService.unlock(function, "/content" + resourceId);
}
}
return false;
}
/**
* Determine if this entity has been restricted to specific group(s)
*/
public boolean isGrouped(GroupAwareEntity entity) {
return entity.getAccess().equals(AccessMode.GROUPED);
}
/**
* Determine if current user can access this group restricted entity
*/
public boolean canAccessViaGroups(Collection groups, String siteId) {
final String userId = sessionManager.getCurrentSessionUserId();
Site site = null;
try {
site = siteService.getSite(siteId);
}
catch (IdUnusedException e) {
// Mucho Weirdness since called from within tool which should
// pass the correct id. But if an error
return false;
}
for (Iterator groupIter = groups.iterator(); groupIter.hasNext();) {
final String currentGroupId = (String) groupIter.next();
final Group currentGroup = site.getGroup(currentGroupId);
if (currentGroup != null) {
final Member member = currentGroup.getMember(userId);
if (member != null && member.getUserId().equals(userId)) {
return true;
}
}
}
return false;
}
public boolean isResourceHidden(ContentEntity podcastResource, Date tempDate) {
return podcastResource.isHidden()
|| (podcastResource.getRetractDate() != null
&& podcastResource.getRetractDate().getTime() <= timeService.newTime().getTime())
|| (tempDate != null && tempDate.getTime() >= timeService.newTime().getTime());
}
///// Utility methods ////////
/**
* Retrieve the site id
*/
private String getSiteId() {
return toolManager.getCurrentPlacement().getContext();
}
}