[jboss-cvs] JBossBlog SVN: r221 - in trunk: resources/META-INF and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Feb 26 08:22:06 EST 2008
Author: adamw
Date: 2008-02-26 08:22:05 -0500 (Tue, 26 Feb 2008)
New Revision: 221
Added:
trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
trunk/src/action/org/jboss/blog/session/security/InvalidLoginException.java
trunk/src/action/org/jboss/blog/session/security/SecurityGroupConverter.java
trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
trunk/src/action/org/jboss/blog/session/security/SecurityRoleConverter.java
trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityGroup.java
trunk/src/model/org/jboss/blog/model/security/SecurityGroup.java
trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java
trunk/src/model/org/jboss/blog/model/security/SecurityUser.java
trunk/view/security/security_group_add.xhtml
trunk/view/security/security_manager.xhtml
Modified:
trunk/resources/META-INF/persistence-design.xml
trunk/resources/META-INF/persistence-dev.xml
trunk/resources/META-INF/persistence-prod.xml
trunk/resources/WEB-INF/pages.xml
trunk/resources/messages_en.properties
trunk/src/action/org/jboss/blog/session/security/Authenticator.java
Log:
Modified: trunk/resources/META-INF/persistence-design.xml
===================================================================
--- trunk/resources/META-INF/persistence-design.xml 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/resources/META-INF/persistence-design.xml 2008-02-26 13:22:05 UTC (rev 221)
@@ -18,6 +18,9 @@
<class>org.jboss.blog.model.Image</class>
<class>org.jboss.blog.model.Template</class>
<class>org.jboss.blog.model.configuration.Configuration</class>
+ <class>org.jboss.blog.model.security.SecurityMapping</class>
+ <class>org.jboss.blog.model.security.SecurityGroup</class>
+ <class>org.jboss.blog.model.security.SecurityUser</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
Modified: trunk/resources/META-INF/persistence-dev.xml
===================================================================
--- trunk/resources/META-INF/persistence-dev.xml 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/resources/META-INF/persistence-dev.xml 2008-02-26 13:22:05 UTC (rev 221)
@@ -18,6 +18,9 @@
<class>org.jboss.blog.model.Image</class>
<class>org.jboss.blog.model.Template</class>
<class>org.jboss.blog.model.configuration.Configuration</class>
+ <class>org.jboss.blog.model.security.SecurityMapping</class>
+ <class>org.jboss.blog.model.security.SecurityGroup</class>
+ <class>org.jboss.blog.model.security.SecurityUser</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
Modified: trunk/resources/META-INF/persistence-prod.xml
===================================================================
--- trunk/resources/META-INF/persistence-prod.xml 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/resources/META-INF/persistence-prod.xml 2008-02-26 13:22:05 UTC (rev 221)
@@ -18,6 +18,9 @@
<class>org.jboss.blog.model.Image</class>
<class>org.jboss.blog.model.Template</class>
<class>org.jboss.blog.model.configuration.Configuration</class>
+ <class>org.jboss.blog.model.security.SecurityMapping</class>
+ <class>org.jboss.blog.model.security.SecurityGroup</class>
+ <class>org.jboss.blog.model.security.SecurityUser</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/resources/WEB-INF/pages.xml 2008-02-26 13:22:05 UTC (rev 221)
@@ -280,6 +280,25 @@
<restrict>#{identity.hasPermission('admin', '')}</restrict>
</page>
+ <!-- Manage security -->
+
+ <page view-id="/security/security_manager.xhtml">
+ <param name="securityGroup" converterId="securityGroupConverter" value="#{securityMod.restrictedSecurityGroup}" />
+ <param name="group" converterId="groupConverter" value="#{securityMod.group}" />
+ <param name="feed" converterId="feedConverter" value="#{securityMod.feed}" />
+ <param name="role" converterId="securityRoleConverter" value="#{securityMod.role}" />
+ </page>
+
+ <page view-id="/security/security_group_add.xhtml">
+ <param name="group" converterId="groupConverter" value="#{securityMod.group}" />
+ <param name="feed" converterId="feedConverter" value="#{securityMod.feed}" />
+ <param name="role" converterId="securityRoleConverter" value="#{securityMod.role}" />
+
+ <navigation from-action="#{securityMod.addSecurityGroup}">
+ <redirect view-id="/security/security_manager.xhtml" />
+ </navigation>
+ </page>
+
<!-- Exceptions -->
<exception class="org.jboss.seam.framework.EntityNotFoundException">
Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/resources/messages_en.properties 2008-02-26 13:22:05 UTC (rev 221)
@@ -125,4 +125,13 @@
blog.search.exception=Malformed search query: {0}.
blog.search.emptyquery=Your query is empty.
-blog.configuration.saved=Configuration saved.
\ No newline at end of file
+blog.configuration.saved=Configuration saved.
+
+blog.security.group.admin.added=Group {0} added to administrators.
+blog.security.group.admin.deleted=Group {0} deleted from administrators.
+
+blog.security.group.group.added=Group {0} added to administrators of group {1}.
+blog.security.group.group.deleted=Group {0} deleted from administrators of group {1}.
+
+blog.security.group.feed.added=Group {0} added to administrators of feed {1}.
+blog.security.group.feed.deleted=Group {0} deleted from administrators of feed {1}.
\ No newline at end of file
Modified: trunk/src/action/org/jboss/blog/session/security/Authenticator.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/Authenticator.java 2008-02-26 09:13:35 UTC (rev 220)
+++ trunk/src/action/org/jboss/blog/session/security/Authenticator.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -4,8 +4,12 @@
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.log.Log;
-import org.jboss.blog.model.security.FeedsSecurityRole;
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.SecurityMapping;
+import java.util.List;
+
@Name("authenticator")
public class Authenticator {
@Logger
@@ -13,11 +17,34 @@
@In
private FeedsIdentity identity;
+
+ @In
+ private ExternalSecurityService externalSecurityService;
+
+ private void addFeedRolesFromMappings(List<SecurityMapping> mappings) {
+ if (mappings != null) {
+ for (SecurityMapping mapping : mappings) {
+ identity.addFeedsRole(mapping.getRole(), mapping.getIdForRole());
+ }
+ }
+ }
public boolean authenticate() {
- log.info("authenticating #0", identity.getUsername());
+ SecurityUser user;
- if ("admin".equals(identity.getUsername())) {
+ try {
+ user = externalSecurityService.authenticate(identity.getUsername(), identity.getPassword());
+ } catch (InvalidLoginException e) {
+ return false;
+ }
+
+ List<SecurityGroup> securityGroups = externalSecurityService.getGroupsOfUser(user);
+
+ for (SecurityGroup securityGroup : securityGroups) {
+ addFeedRolesFromMappings(securityGroup.getMappings());
+ }
+
+ /*if ("admin".equals(identity.getUsername())) {
identity.addFeedsRole(FeedsSecurityRole.ADMIN);
}
if ("bobs_group".equals(identity.getUsername())) {
@@ -25,7 +52,7 @@
}
if ("sacha".equals(identity.getUsername())) {
identity.addFeedsRole(FeedsSecurityRole.FEED_ADMIN, 34);
- }
+ }*/
return true;
}
Added: trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/ExternalSecurityService.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,74 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("externalSecurityService")
+ at AutoCreate
+ at Scope(ScopeType.STATELESS)
+public class ExternalSecurityService {
+ @In
+ private EntityManager entityManager;
+
+ public SecurityUser authenticate(String username, String password) throws InvalidLoginException {
+ return null;
+ }
+
+ public SecurityGroup getUnrestrictedSecurityGroup(RestrictedSecurityGroup securityGroup) {
+ try {
+ SecurityGroup entitySg = (SecurityGroup) entityManager.createQuery(
+ "select sg from SecurityGroup sg where sg.externalId = ?1")
+ .setParameter(1, securityGroup.getExternalId()).getSingleResult();
+ entitySg.setRealGroup(securityGroup.getRealGroup());
+
+ return entitySg;
+ } catch (NoResultException e) {
+ SecurityGroup sg = new SecurityGroup();
+ sg.setExternalId(securityGroup.getExternalId());
+ sg.setRealGroup(securityGroup.getRealGroup());
+
+ entityManager.persist(sg);
+
+ return sg;
+ }
+ }
+
+ public List<RestrictedSecurityGroup> getAllGroups() {
+ List<RestrictedSecurityGroup> groups = new ArrayList<RestrictedSecurityGroup>();
+ groups.add(new SecurityGroup("group1", 1l));
+ groups.add(new SecurityGroup("group2", 2l));
+ groups.add(new SecurityGroup("group3", 3l));
+
+ return groups;
+ }
+
+ public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
+ return null;
+ }
+
+ public String getDisplayName(SecurityUser securityUser) {
+ return "";
+ }
+
+ public String getDisplayName(RestrictedSecurityGroup securityGroup) {
+ if (securityGroup.getRealGroup() == null) {
+ securityGroup.setRealGroup("group" + securityGroup.getExternalId());
+ }
+
+ return securityGroup.getRealGroup().toString();
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/security/InvalidLoginException.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/InvalidLoginException.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/InvalidLoginException.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,7 @@
+package org.jboss.blog.session.security;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class InvalidLoginException extends Exception {
+}
Added: trunk/src/action/org/jboss/blog/session/security/SecurityGroupConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityGroupConverter.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityGroupConverter.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,28 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.faces.Converter;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("securityGroupConverter")
+ at BypassInterceptors
+ at Converter
+public class SecurityGroupConverter implements javax.faces.convert.Converter {
+ @Transactional
+ public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+ return new SecurityGroup(null, Long.parseLong(value));
+ }
+
+ public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+ return ((RestrictedSecurityGroup) value).getExternalId().toString();
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,157 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.faces.FacesMessages;
+import org.jboss.blog.model.security.*;
+import org.jboss.blog.model.Group;
+import org.jboss.blog.model.feed.Feed;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.faces.application.FacesMessage;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("securityMod")
+ at Scope(ScopeType.CONVERSATION)
+ at AutoCreate
+public class SecurityModBean {
+ @In
+ private EntityManager entityManager;
+
+ @In
+ private ExternalSecurityService externalSecurityService;
+
+ @In
+ private FacesMessages facesMessages;
+
+ private RestrictedSecurityGroup restrictedSecurityGroup;
+ private Group group;
+ private Feed feed;
+ private FeedsSecurityRole role;
+
+ public RestrictedSecurityGroup getRestrictedSecurityGroup() {
+ return restrictedSecurityGroup;
+ }
+
+ public void setRestrictedSecurityGroup(RestrictedSecurityGroup restrictedSecurityGroup) {
+ this.restrictedSecurityGroup = restrictedSecurityGroup;
+ }
+
+ public Group getGroup() {
+ return group;
+ }
+
+ public void setGroup(Group group) {
+ this.group = group;
+ }
+
+ public Feed getFeed() {
+ return feed;
+ }
+
+ public void setFeed(Feed feed) {
+ this.feed = feed;
+ }
+
+ public FeedsSecurityRole getRole() {
+ return role;
+ }
+
+ public void setRole(FeedsSecurityRole role) {
+ this.role = role;
+ }
+
+ private SecurityMapping getMapping(FeedsSecurityRole role, Integer idForRole) {
+ try {
+ if (idForRole == null) {
+ return (SecurityMapping) entityManager.createQuery(
+ "select mapping from SecurityMapping mapping where mapping.role = ?1")
+ .setParameter(1, role).getSingleResult();
+ } else {
+ return (SecurityMapping) entityManager.createQuery(
+ "select mapping from SecurityMapping mapping where mapping.role = ?1 and mapping.idForRole = ?2")
+ .setParameter(1, role).setParameter(2, idForRole).getSingleResult();
+ }
+ } catch (NoResultException e) {
+ SecurityMapping mapping = new SecurityMapping();
+ mapping.setRole(role);
+ mapping.setIdForRole(idForRole);
+ mapping.setGroups(new ArrayList<SecurityGroup>());
+ entityManager.persist(mapping);
+
+ return mapping;
+ }
+ }
+
+ public List<SecurityGroup> getAdministratorGroups() {
+ return getMapping(FeedsSecurityRole.ADMIN, null).getGroups();
+ }
+
+ public List<SecurityGroup> getGroupAdministratorGroups(Group group) {
+ return getMapping(FeedsSecurityRole.GROUP_ADMIN, group.getId()).getGroups();
+ }
+
+ public List<SecurityGroup> getFeedAdministratorGroups(Feed feed) {
+ return getMapping(FeedsSecurityRole.FEED_ADMIN, feed.getId()).getGroups();
+ }
+
+ private SecurityMapping getMapping() {
+ Integer idForRole = null;
+ if (getGroup() != null) {
+ idForRole = getGroup().getId();
+ }
+ if (getFeed() != null) {
+ idForRole = getFeed().getId();
+ }
+
+ return getMapping(getRole(), idForRole);
+ }
+
+ public void addSecurityGroup() {
+ SecurityGroup sg = externalSecurityService.getUnrestrictedSecurityGroup(getRestrictedSecurityGroup());
+ SecurityMapping mapping = getMapping();
+
+ if (!mapping.getGroups().contains(sg)) {
+ mapping.getGroups().add(sg);
+ }
+
+ String bundleId;
+ Object param = null;
+ switch (getRole()) {
+ case ADMIN: bundleId = "blog.security.group.admin.added"; break;
+ case GROUP_ADMIN: bundleId = "blog.security.group.group.added"; param = getGroup().getDisplayName(); break;
+ case FEED_ADMIN: bundleId = "blog.security.group.feed.added"; param = getFeed().getName(); break;
+ default: return;
+ }
+
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, bundleId,
+ externalSecurityService.getDisplayName(sg), param);
+ }
+
+ public void deleteSecurityGroup() {
+ SecurityGroup sg = externalSecurityService.getUnrestrictedSecurityGroup(getRestrictedSecurityGroup());
+ SecurityMapping mapping = getMapping();
+
+ mapping.getGroups().remove(sg);
+
+ String bundleId;
+ Object param = null;
+ switch (getRole()) {
+ case ADMIN: bundleId = "blog.security.group.admin.deleted"; break;
+ case GROUP_ADMIN: bundleId = "blog.security.group.group.deleted"; param = getGroup().getDisplayName(); break;
+ case FEED_ADMIN: bundleId = "blog.security.group.feed.deleted"; param = getFeed().getName(); break;
+ default: return;
+ }
+
+ facesMessages.addFromResourceBundle(FacesMessage.SEVERITY_INFO, bundleId,
+ externalSecurityService.getDisplayName(sg), param);
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/security/SecurityRoleConverter.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityRoleConverter.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityRoleConverter.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,27 @@
+package org.jboss.blog.session.security;
+
+import org.jboss.blog.model.security.FeedsSecurityRole;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Transactional;
+import org.jboss.seam.annotations.faces.Converter;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Name("securityRoleConverter")
+ at BypassInterceptors
+ at Converter
+public class SecurityRoleConverter implements javax.faces.convert.Converter {
+ @Transactional
+ public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
+ return FeedsSecurityRole.valueOf(value);
+ }
+
+ public String getAsString(FacesContext context, UIComponent cmp, Object value) {
+ return value.toString();
+ }
+}
\ No newline at end of file
Added: trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityGroup.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityGroup.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/security/RestrictedSecurityGroup.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,14 @@
+package org.jboss.blog.model.security;
+
+import java.io.Serializable;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public interface RestrictedSecurityGroup extends Serializable {
+ Long getExternalId();
+
+ Object getRealGroup();
+
+ void setRealGroup(Object realGroup);
+}
Added: trunk/src/model/org/jboss/blog/model/security/SecurityGroup.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/SecurityGroup.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/security/SecurityGroup.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,82 @@
+package org.jboss.blog.model.security;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Entity
+public class SecurityGroup implements RestrictedSecurityGroup {
+ @Id
+ @GeneratedValue
+ @Column(updatable = false)
+ private Integer id;
+
+ @Column(unique = true)
+ private Long externalId;
+
+ @ManyToMany(mappedBy = "groups")
+ private List<SecurityMapping> mappings;
+
+ @Transient
+ private Object realGroup;
+
+ public SecurityGroup() { }
+
+ public SecurityGroup(Object realGroup, Long externalId) {
+ this.realGroup = realGroup;
+ this.externalId = externalId;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Long getExternalId() {
+ return externalId;
+ }
+
+ public void setExternalId(Long externalId) {
+ this.externalId = externalId;
+ }
+
+ public List<SecurityMapping> getMappings() {
+ return mappings;
+ }
+
+ public void setMappings(List<SecurityMapping> mappings) {
+ this.mappings = mappings;
+ }
+
+ public Object getRealGroup() {
+ return realGroup;
+ }
+
+ public void setRealGroup(Object realGroup) {
+ this.realGroup = realGroup;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SecurityGroup)) return false;
+
+ SecurityGroup that = (SecurityGroup) o;
+
+ if (externalId != null ? !externalId.equals(that.externalId) : that.externalId != null) return false;
+ if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (id != null ? id.hashCode() : 0);
+ result = 31 * result + (externalId != null ? externalId.hashCode() : 0);
+ return result;
+ }
+}
Added: trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/security/SecurityMapping.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,81 @@
+package org.jboss.blog.model.security;
+
+import org.hibernate.validator.NotNull;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Entity
+ at Table(uniqueConstraints = @UniqueConstraint(columnNames = {"role", "idForRole"}))
+public class SecurityMapping {
+ @Id
+ @GeneratedValue
+ @Column(updatable = false)
+ private Integer id;
+
+ @Column
+ @NotNull
+ private FeedsSecurityRole role;
+
+ @Column
+ private Integer idForRole;
+
+ @ManyToMany
+ private List<SecurityGroup> groups;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public FeedsSecurityRole getRole() {
+ return role;
+ }
+
+ public void setRole(FeedsSecurityRole role) {
+ this.role = role;
+ }
+
+ public Integer getIdForRole() {
+ return idForRole;
+ }
+
+ public void setIdForRole(Integer idForRole) {
+ this.idForRole = idForRole;
+ }
+
+ public List<SecurityGroup> getGroups() {
+ return groups;
+ }
+
+ public void setGroups(List<SecurityGroup> groups) {
+ this.groups = groups;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SecurityMapping)) return false;
+
+ SecurityMapping that = (SecurityMapping) o;
+
+ if (id != null ? !id.equals(that.id) : that.id != null) return false;
+ if (idForRole != null ? !idForRole.equals(that.idForRole) : that.idForRole != null) return false;
+ if (role != that.role) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (id != null ? id.hashCode() : 0);
+ result = 31 * result + (role != null ? role.hashCode() : 0);
+ result = 31 * result + (idForRole != null ? idForRole.hashCode() : 0);
+ return result;
+ }
+}
Added: trunk/src/model/org/jboss/blog/model/security/SecurityUser.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/SecurityUser.java (rev 0)
+++ trunk/src/model/org/jboss/blog/model/security/SecurityUser.java 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,66 @@
+package org.jboss.blog.model.security;
+
+import org.hibernate.validator.NotNull;
+
+import javax.persistence.*;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+ at Entity
+public class SecurityUser {
+ @Id
+ @GeneratedValue
+ @Column(updatable = false)
+ private Integer id;
+
+ @Column
+ @NotNull
+ private Long externalId;
+
+ @Transient
+ private Object realUser;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Long getExternalId() {
+ return externalId;
+ }
+
+ public void setExternalId(Long externalId) {
+ this.externalId = externalId;
+ }
+
+ public Object getRealUser() {
+ return realUser;
+ }
+
+ public void setRealUser(Object realUser) {
+ this.realUser = realUser;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SecurityUser)) return false;
+
+ SecurityUser user = (SecurityUser) o;
+
+ if (externalId != null ? !externalId.equals(user.externalId) : user.externalId != null) return false;
+ if (id != null ? !id.equals(user.id) : user.id != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (id != null ? id.hashCode() : 0);
+ result = 31 * result + (externalId != null ? externalId.hashCode() : 0);
+ return result;
+ }
+}
Added: trunk/view/security/security_group_add.xhtml
===================================================================
--- trunk/view/security/security_group_add.xhtml (rev 0)
+++ trunk/view/security/security_group_add.xhtml 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,38 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:a="http://richfaces.org/a4j"
+ template="../layout/template.xhtml">
+ <ui:define name="header">
+ Select group to add:
+ </ui:define>
+ <ui:define name="body">
+ <h:form>
+ <div class="adminforms">
+ <br />
+ <h:panelGrid columns="1">
+ <h:selectOneListbox required="true" value="#{securityMod.restrictedSecurityGroup}"
+ converter="securityGroupConverter">
+ <s:selectItems var="group" value="#{externalSecurityService.allGroups}"
+ label="#{externalSecurityService.getDisplayName(group)}" />
+ </h:selectOneListbox>
+ </h:panelGrid>
+
+ <div class="formbuttons">
+ <ul>
+ <li>
+ <h:commandButton value="Add" styleClass="submit" action="#{securityMod.addSecurityGroup}">
+ <f:param name="role" value="ADMIN" />
+ </h:commandButton>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </h:form>
+ </ui:define>
+</ui:composition>
Added: trunk/view/security/security_manager.xhtml
===================================================================
--- trunk/view/security/security_manager.xhtml (rev 0)
+++ trunk/view/security/security_manager.xhtml 2008-02-26 13:22:05 UTC (rev 221)
@@ -0,0 +1,98 @@
+<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<ui:composition xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:s="http://jboss.com/products/seam/taglib"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:rich="http://richfaces.org/rich"
+ xmlns:a="http://richfaces.org/a4j"
+ template="../layout/template.xhtml">
+ <ui:define name="header">
+ Security manager
+ </ui:define>
+ <ui:define name="body">
+ <h3>Administrators:</h3>
+
+ <ul>
+ <ui:repeat var="securityGroup" value="#{securityMod.administratorGroups}">
+ <li>
+ #{externalSecurityService.getDisplayName(securityGroup)}
+ (
+ <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
+ <f:param name="role" value="ADMIN" />
+ <f:param name="securityGroup" value="#{securityGroup.externalId}" />
+ </s:link>
+ )
+ </li>
+ </ui:repeat>
+ </ul>
+
+ <s:link value="Add group" view="/security/security_group_add.xhtml">
+ <f:param name="role" value="ADMIN" />
+ </s:link>
+
+ <h3>Feed groups administrators:</h3>
+
+ <table cellspacing="5" class="deftable" width="75%">
+ <ui:repeat var="group" value="#{groupsService.allGroups}">
+ <tr>
+ <td class="term" width="15%">#{group.displayName}</td>
+ <td class="def">
+ <ui:repeat var="securityGroup" value="#{securityMod.getGroupAdministratorGroups(group)}">
+ <li>
+ #{externalSecurityService.getDisplayName(securityGroup)}
+ (
+ <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
+ <f:param name="role" value="GROUP_ADMIN" />
+ <f:param name="group" value="#{group.id}" />
+ <f:param name="securityGroup" value="#{securityGroup.externalId}" />
+ </s:link>
+ )
+ </li>
+ </ui:repeat>
+
+ <s:link value="Add group" view="/security/security_group_add.xhtml">
+ <f:param name="role" value="GROUP_ADMIN" />
+ <f:param name="group" value="#{group.id}" />
+ </s:link>
+ </td>
+ </tr>
+ </ui:repeat>
+ </table>
+
+ <h3>Feed administrators:</h3>
+
+ <ui:repeat var="group" value="#{groupsService.allGroups}">
+ <s:fragment rendered="#{groupsService.acceptedFeeds(group).size() > 0}">
+ #{group.displayName}:
+ <table cellspacing="5" class="deftable" width="75%">
+ <ui:repeat var="feed" value="#{groupsService.acceptedFeeds(group)}">
+ <tr>
+ <td class="term" width="15%">#{feed.name}</td>
+ <td class="def">
+ <ui:repeat var="securityGroup" value="#{securityMod.getFeedAdministratorGroups(feed)}">
+ <li>
+ #{externalSecurityService.getDisplayName(securityGroup)}
+ (
+ <s:link value="delete" action="#{securityMod.deleteSecurityGroup}">
+ <f:param name="role" value="FEED_ADMIN" />
+ <f:param name="feed" value="#{feed.name}" />
+ <f:param name="securityGroup" value="#{securityGroup.externalId}" />
+ </s:link>
+ )
+ </li>
+ </ui:repeat>
+
+ <s:link value="Add group" view="/security/security_group_add.xhtml">
+ <f:param name="role" value="FEED_ADMIN" />
+ <f:param name="feed" value="#{feed.name}" />
+ </s:link>
+ </td>
+ </tr>
+ </ui:repeat>
+ </table>
+ </s:fragment>
+ </ui:repeat>
+ </ui:define>
+</ui:composition>
More information about the jboss-cvs-commits
mailing list