package com.wooki.domain.biz; import java.util.Calendar; import org.apache.tapestry5.ioc.annotations.Inject; import org.hibernate.Criteria; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.acls.domain.BasePermission; import org.springframework.security.acls.domain.GrantedAuthoritySid; import org.springframework.security.acls.domain.PrincipalSid; import org.springframework.security.acls.model.Sid; import com.wooki.domain.dao.AuthorityDAO; import com.wooki.domain.model.Authority; import com.wooki.domain.model.Book; import com.wooki.domain.model.User; import com.wooki.domain.model.WookiEntity; import com.wooki.domain.model.WookiGrantedAuthority; public class SecurityManagerImpl implements SecurityManager { private AclManager aclManager; @Inject @Autowired private AuthorityDAO authorityDao; public void setCollaboratorPermission(WookiEntity entity, User user) { this.aclManager.addPermission( entity, new PrincipalSid(user.getUsername()), BasePermission.WRITE, Book.class); } public void removeCollaboratorPermission(WookiEntity entity, User user) { this.aclManager.deletePermission( entity, new PrincipalSid(user.getUsername()), BasePermission.WRITE, Book.class); } public void setOwnerPermission(WookiEntity entity) { Sid adminSid = new GrantedAuthoritySid(WookiGrantedAuthority.ROLE_ADMIN); this.aclManager.addPermission(entity, adminSid, BasePermission.ADMINISTRATION, entity .getClass()); this.aclManager.addPermission(entity, BasePermission.ADMINISTRATION, entity.getClass()); } public void setOwnerPermission(WookiEntity entity, User user) { this.aclManager.addPermission( entity, new PrincipalSid(user.getUsername()), BasePermission.ADMINISTRATION, Book.class); } public synchronized Authority getOrCreateAuthority(String authority) { Criteria result = this.authorityDao.createColumnCriteria("authority", authority); Authority auth = (Authority) result.uniqueResult(); if (auth == null) { auth = new Authority(authority); auth.setCreationDate(Calendar.getInstance().getTime()); } return auth; } public AclManager getAclManager() { return aclManager; } public void setAclManager(AclManager aclManager) { this.aclManager = aclManager; } }