[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