[jboss-cvs] JBossBlog SVN: r293 - in trunk: resources and 19 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Apr 26 06:11:19 EDT 2008
Author: adamw
Date: 2008-04-26 06:11:18 -0400 (Sat, 26 Apr 2008)
New Revision: 293
Added:
trunk/src/action/org/jboss/blog/session/security/filtering/FeedsSecurity.java
trunk/src/action/org/jboss/blog/session/security/tools/
trunk/src/action/org/jboss/blog/session/security/tools/FeedSecurityTools.java
Removed:
trunk/src/action/org/jboss/blog/session/cache/CacheManagerJBossCacheImpl.java
Modified:
trunk/blog.iml
trunk/resources/META-INF/security.drl
trunk/resources/WEB-INF/pages.xml
trunk/resources/messages_en.properties
trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java
trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java
trunk/src/action/org/jboss/blog/session/feed/dao/HighlightsFeedDao.java
trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java
trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java
trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java
trunk/src/action/org/jboss/blog/session/group/GroupsServiceImpl.java
trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java
trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
trunk/src/model/org/jboss/blog/model/Post.java
trunk/src/model/org/jboss/blog/model/feed/Feed.java
trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java
trunk/src/model/org/jboss/blog/model/security/FeedsSecurityRole.java
trunk/src/services/org/jboss/blog/service/FeedsService.java
trunk/src/shotoku/org/jboss/blog/session/feed/dao/ShotokuFeedDao.java
trunk/src/tools/org/jboss/blog/tools/GeneralTools.java
trunk/view/home.xhtml
trunk/view/manage/feed_add.xhtml
trunk/view/manage/feed_edit.xhtml
trunk/view/manage/feed_mod.xhtml
trunk/view/manage/feed_propose.xhtml
trunk/view/manage/index.xhtml
Log:
Modified: trunk/blog.iml
===================================================================
--- trunk/blog.iml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/blog.iml 2008-04-26 10:11:18 UTC (rev 293)
@@ -400,7 +400,9 @@
<root url="jar://$MODULE_DIR$/lib/hibernate-search.jar!/" />
</CLASSES>
<JAVADOC />
- <SOURCES />
+ <SOURCES>
+ <root url="file://$MODULE_DIR$/../jboss/hibernate/search/src/java" />
+ </SOURCES>
</library>
</orderEntry>
<orderEntry type="module-library">
Modified: trunk/resources/META-INF/security.drl
===================================================================
--- trunk/resources/META-INF/security.drl 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/resources/META-INF/security.drl 2008-04-26 10:11:18 UTC (rev 293)
@@ -26,6 +26,21 @@
c.grant();
end;
+rule CanViewFeed
+when
+ c: PermissionCheck(name == "feed", action == "view") and
+ (
+ Feed(restricted == false)
+ ) or
+ (
+ Feed(restricted == true) and
+ feed : Feed() and
+ FeedsCombinedRole(role == FeedsSecurityRole.VIEW, id == feed.id)
+ )
+then
+ c.grant();
+end;
+
rule CanAddFeed
when
c: PermissionCheck(name == "feed", action == "add") and
Modified: trunk/resources/WEB-INF/pages.xml
===================================================================
--- trunk/resources/WEB-INF/pages.xml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/resources/WEB-INF/pages.xml 2008-04-26 10:11:18 UTC (rev 293)
@@ -39,6 +39,8 @@
<page view-id="/view/feed.xhtml">
<param name="name" converterId="feedConverter" value="#{feedView.feed}" />
<param name="from" value="#{feedView.from}" />
+
+ <restrict>#{identity.hasPermission('feed', 'view', feedView.feed)}</restrict>
</page>
<page view-id="/view/post.xhtml">
@@ -48,6 +50,8 @@
<param name="name" value="#{postView.post.feed.name}" />
</redirect>
</navigation>
+
+ <restrict>#{identity.hasPermission('feed', 'view', postView.post.feed)}</restrict>
</page>
<!-- Search -->
Modified: trunk/resources/messages_en.properties
===================================================================
--- trunk/resources/messages_en.properties 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/resources/messages_en.properties 2008-04-26 10:11:18 UTC (rev 293)
@@ -161,4 +161,10 @@
blog.security.user.group.deleted=User {0} deleted from administrators of group {1}.
blog.security.user.feed.added=User {0} added to administrators of feed {1}.
-blog.security.user.feed.deleted=User {0} deleted from administrators of feed {1}.
\ No newline at end of file
+blog.security.user.feed.deleted=User {0} deleted from administrators of feed {1}.
+
+blog.security.user.feedview.added=User {0} added to viewers of feed {1}.
+blog.security.user.feedview.deleted=User {0} deleted from viewers of feed {1}.
+
+blog.security.group.feedview.added=Group {0} added to viewers of feed {1}.
+blog.security.group.feedview.deleted=Group {0} deleted from viewers of feed {1}.
\ No newline at end of file
Deleted: trunk/src/action/org/jboss/blog/session/cache/CacheManagerJBossCacheImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/cache/CacheManagerJBossCacheImpl.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/cache/CacheManagerJBossCacheImpl.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -1,128 +0,0 @@
-package org.jboss.blog.session.cache;
-
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.log.Log;
-import org.jboss.cache.aop.PojoCache;
-import org.jboss.cache.Fqn;
-import org.jboss.cache.CacheException;
-import org.jboss.blog.model.feed.RestrictedFeed;
-import org.jboss.blog.model.RestrictedPost;
-import org.jboss.blog.session.xml.content.InMemoryContentResponse;
-
-import java.lang.ref.SoftReference;
-import java.util.List;
-
-/**
- * TODO: fix, doesn't work
- * @author Adam Warski (adam at warski dot org)
- */
-public class CacheManagerJBossCacheImpl implements CacheManager {
- @In
- private PojoCache pojoCache;
-
- @Logger
- private Log log;
-
- private final static Fqn BASE_FQN = new Fqn("blog");
- private final static Object CACHE_MAP_KEY = new Object();
-
- //
-
- private <T> T getFromSoftReference(SoftReference<T> reference) {
- if (reference == null) {
- return null;
- }
-
- return reference.get();
- }
-
- private void readPost(RestrictedPost post) {
- post.getFeed();
- post.getCategories();
- post.getEnclosures();
- post.getImages();
- }
-
- private void readPosts(List<? extends RestrictedPost> posts) {
- for (RestrictedPost post : posts) {
- readPost(post);
- }
- }
-
- //
-
- public void evictAll() {
- try {
- log.debug("Evicting everything from the cache.");
- pojoCache.remove(BASE_FQN);
- } catch (CacheException e) {
- log.error(e);
- }
- }
-
- //
-
- private Fqn getFeedPostsFqn(String feedName, int from, int to) {
- return new Fqn(BASE_FQN, feedName, from, to);
- }
-
- public void putFeedPosts(RestrictedFeed feed, List<? extends RestrictedPost> posts, int from, int to) {
- try {
- readPosts(posts);
-
- log.debug("Putting feed '#0' posts into the cache, from #1 to #2.", feed.getName(), from, to);
- pojoCache.put(getFeedPostsFqn(feed.getName(), from, to), CACHE_MAP_KEY,
- new SoftReference<List<? extends RestrictedPost>>(posts));
- } catch (CacheException e) {
- log.error(e);
- }
- }
-
- public List<? extends RestrictedPost> getFeedPosts(String feedName, int from, int to) {
- try {
- //noinspection unchecked
- List<? extends RestrictedPost> inCache =
- getFromSoftReference(((SoftReference<List<? extends RestrictedPost>>) pojoCache.get(
- getFeedPostsFqn(feedName, from, to), CACHE_MAP_KEY)));
- log.debug("Getting feed '#0' posts from the cache, from #1 to #2, result: #3.",
- feedName, from, to, inCache);
- return inCache;
- } catch (CacheException e) {
- log.error(e);
- return null;
- }
- }
-
- //
-
- private final static Object FEED_XML = new Object();
-
- private Fqn getFeedXmlFqn(String feedName, String feedType) {
- return new Fqn(BASE_FQN, FEED_XML, feedName, feedType == null ? null : feedType.toLowerCase());
- }
-
- public void putFeedXml(String feedName, String feedType, InMemoryContentResponse xml) {
- try {
- log.debug("Putting xml for feed '#0' to the cache, type: #1.", feedName, feedType);
- pojoCache.put(getFeedXmlFqn(feedName, feedType), CACHE_MAP_KEY,
- new SoftReference<InMemoryContentResponse>(xml));
- } catch (CacheException e) {
- log.error(e);
- }
- }
-
- public InMemoryContentResponse getFeedXml(String feedName, String feedType) {
- try {
- //noinspection unchecked
- InMemoryContentResponse inCache = getFromSoftReference(((SoftReference<InMemoryContentResponse>)
- pojoCache.get(getFeedXmlFqn(feedName, feedType), CACHE_MAP_KEY)));
- log.debug("Getting xml for feed '#0' from the cache, type: #1, result: #2.",
- feedName, feedType, inCache);
- return inCache;
- } catch (CacheException e) {
- log.error(e);
- return null;
- }
- }
-}
Modified: trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/FeedsServiceImpl.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -10,6 +10,8 @@
import org.jboss.blog.session.feed.type.FeedTypes;
import org.jboss.blog.session.feed.posts.DatabaseFeedPosts;
import org.jboss.blog.session.cache.CacheManager;
+import org.jboss.blog.session.security.tools.FeedSecurityTools;
+import org.jboss.blog.session.security.FeedsIdentity;
import org.jboss.seam.annotations.*;
import org.jboss.seam.log.Log;
import org.jboss.seam.ScopeType;
@@ -38,6 +40,9 @@
@In
private CacheManager cacheManager;
+ @In
+ private FeedsIdentity identity;
+
@Logger
private Log log;
@@ -72,28 +77,52 @@
}
public List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to) {
- List<? extends RestrictedPost> inCache = cacheManager.getFeedPosts(feed.getName(), from, to);
+ boolean restricted = false;
- if (inCache != null) {
- return inCache;
- } else {
- //noinspection unchecked
- List<? extends RestrictedPost> posts;
+ // We want to get restricted feeds, if we are logged in, the current feed is restricted and
+ // we have sufficient permissions to view the feed.
+ if (identity.isLoggedIn() && feed.getRestricted() && FeedSecurityTools.canViewFeed(feed, true)) {
+ restricted = true;
+ }
- try {
- log.debug("Reading feed '#0' posts from the DB, from #1 to #2.", feed.getName(), from, to);
- posts = feedTypes.getFeedDao(feed).getPosts(from, to);
- } catch (InvalidFeedTypeException e) {
- log.error(e);
- return new ArrayList<RestrictedPost>();
- }
+ return getPosts(feed, from, to, restricted);
+ }
- if (posts != null) {
- cacheManager.putFeedPosts(feed, posts, from, to);
+ public List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to, boolean restricted) {
+ boolean isFeedRestricted = feed.getRestricted();
+
+ // We return an empty list if:
+ // - we don't want restricted posts, but this feed is restricted
+ // - we want restricted posts, this feed is restricted, but we can't view it.
+ if ((!restricted && isFeedRestricted) ||
+ (restricted && isFeedRestricted && !FeedSecurityTools.canViewFeed(feed, restricted))) {
+ return new ArrayList<RestrictedPost>();
+ }
+
+ // We use the cache only if the feed isn't restricted.
+ if (!isFeedRestricted) {
+ List<? extends RestrictedPost> inCache = cacheManager.getFeedPosts(feed.getName(), from, to);
+
+ if (inCache != null) {
+ return inCache;
}
+ }
- return posts;
+ List<? extends RestrictedPost> posts;
+
+ try {
+ log.debug("Reading feed '#0' posts from the DB, from #1 to #2.", feed.getName(), from, to);
+ posts = feedTypes.getFeedDao(feed).getPosts(from, to, restricted);
+ } catch (InvalidFeedTypeException e) {
+ log.error(e);
+ return new ArrayList<RestrictedPost>();
}
+
+ if (posts != null && !isFeedRestricted) {
+ cacheManager.putFeedPosts(feed, posts, from, to);
+ }
+
+ return posts;
}
public List<? extends RestrictedPost> getPosts(int from, int to) {
Modified: trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/AggregatedFeedDao.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -23,9 +23,9 @@
this.aggregatedFeed = aggregatedFeed;
}
- public List<? extends RestrictedPost> getPosts(int from, int to) {
+ public List<? extends RestrictedPost> getPosts(int from, int to, boolean restricted) {
return ((AggregatedFeedPosts) Component.getInstance("aggregatedFeedPosts")).getPosts(
- aggregatedFeed, from, to);
+ aggregatedFeed, from, to, restricted);
}
public void update() {
Modified: trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/FeedDao.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -9,7 +9,7 @@
* @author Adam Warski (adam at warski dot org)
*/
public interface FeedDao {
- public List<? extends RestrictedPost> getPosts(int from, int to);
+ public List<? extends RestrictedPost> getPosts(int from, int to, boolean restricted);
public void update() throws UpdateException;
}
Modified: trunk/src/action/org/jboss/blog/session/feed/dao/HighlightsFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/HighlightsFeedDao.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/HighlightsFeedDao.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -2,11 +2,14 @@
import org.jboss.blog.model.feed.HighlightsFeed;
import org.jboss.blog.model.RestrictedPost;
+import org.jboss.blog.model.Post;
import org.jboss.blog.session.feed.type.FeedType;
import org.jboss.blog.session.update.UpdateException;
+import org.jboss.blog.session.security.tools.FeedSecurityTools;
import org.jboss.blog.tools.GeneralTools;
import java.util.List;
+import java.util.ArrayList;
/**
* @author Adam Warski (adam at warski dot org)
@@ -23,8 +26,17 @@
this.highlightsFeed = highlightsFeed;
}
- public List<? extends RestrictedPost> getPosts(int from, int to) {
- return GeneralTools.subList(highlightsFeed.getSelectedPosts(), from, to);
+ public List<? extends RestrictedPost> getPosts(int from, int to, boolean restricted) {
+ List<Post> posts = GeneralTools.subList(highlightsFeed.getSelectedPosts(), from, to);
+ List<Post> ret = new ArrayList<Post>();
+
+ for (Post post : posts) {
+ if (FeedSecurityTools.canViewFeed(post.getFeed(), restricted)) {
+ ret.add(post);
+ }
+ }
+
+ return ret;
}
public void update() throws UpdateException {
Modified: trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/dao/RemoteFeedDao.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -9,6 +9,7 @@
import org.jboss.seam.Component;
import java.util.List;
+import java.util.ArrayList;
/**
* @author Adam Warski (adam at warski dot org)
@@ -25,7 +26,7 @@
this.remoteFeed = remoteFeed;
}
- public List<? extends RestrictedPost> getPosts(int from, int to) {
+ public List<? extends RestrictedPost> getPosts(int from, int to, boolean restricted) {
return ((DatabaseFeedPosts) Component.getInstance("databaseFeedPosts")).getPosts(
remoteFeed, from, to);
}
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/AggregatedFeedPosts.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -4,11 +4,13 @@
import org.jboss.blog.model.feed.Feed;
import org.jboss.blog.model.RestrictedPost;
import org.jboss.blog.model.Group;
+import org.jboss.blog.model.Post;
import org.jboss.blog.service.FeedsService;
import org.jboss.blog.service.GroupsService;
import org.jboss.blog.tools.GeneralTools;
import org.jboss.blog.tools.PostFilterTools;
import org.jboss.blog.model.post.PostFilter;
+import org.jboss.blog.session.security.tools.FeedSecurityTools;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
@@ -32,7 +34,8 @@
private AggregatedFeedStack aggregatedFeedStack;
@SuppressWarnings("unchecked")
- public List<? extends RestrictedPost> getPosts(AggregatedFeed aggregatedFeed, int from, int to) {
+ public List<? extends RestrictedPost> getPosts(AggregatedFeed aggregatedFeed, int from, int to,
+ boolean restricted) {
if (aggregatedFeedStack.contains(aggregatedFeed)) {
return null;
}
@@ -67,7 +70,8 @@
Set<Feed> newAvailableFeeds = new HashSet<Feed>();
for (Feed feed : availableFeeds) {
- List<? extends RestrictedPost> feedPosts = feedsService.getPosts(feed, feedPostsFrom, feedPostsTo);
+ List<? extends RestrictedPost> feedPosts = feedsService.getPosts(feed, feedPostsFrom, feedPostsTo,
+ restricted);
if (feedPosts == null) {
continue;
Modified: trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/feed/posts/DatabaseFeedPosts.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -32,7 +32,7 @@
@SuppressWarnings("unchecked")
public List<? extends RestrictedPost> getPosts(int from, int to) {
return (List<Post>) entityManager.createQuery(
- "select post from Post post order by post.published desc, post.link")
+ "select post from Post post where post.feed.restricted = false order by post.published desc, post.link")
.setMaxResults(to-from).setFirstResult(from)
.setHint("org.hibernate.cacheable", Boolean.TRUE).getResultList();
}
Modified: trunk/src/action/org/jboss/blog/session/group/GroupsServiceImpl.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/group/GroupsServiceImpl.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/group/GroupsServiceImpl.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -31,14 +31,21 @@
public List<Feed> acceptedFeeds(Group group) {
//noinspection unchecked
return entityManager
- .createQuery("select feed from Feed feed where feed.group = ?1 and feed.accepted = true")
+ .createQuery("select feed from Feed feed where feed.group = ?1 and feed.accepted = true and feed.restricted = false")
.setParameter(1, group).setHint("org.hibernate.cacheable", Boolean.TRUE).getResultList();
}
public List<Feed> unacceptedFeeds(Group group) {
//noinspection unchecked
return entityManager
- .createQuery("select feed from Feed feed where feed.group = ?1 and not (feed.accepted = true)")
+ .createQuery("select feed from Feed feed where feed.group = ?1 and not (feed.accepted = true) and feed.restricted = false")
.setParameter(1, group).setHint("org.hibernate.cacheable", Boolean.TRUE).getResultList();
}
+
+ public List<Feed> restrictedFeeds(Group group) {
+ //noinspection unchecked
+ return entityManager
+ .createQuery("select feed from Feed feed where feed.group = ?1 and feed.restricted = true")
+ .setParameter(1, group).setHint("org.hibernate.cacheable", Boolean.TRUE).getResultList();
+ }
}
Modified: trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/search/PostSearchBean.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -108,9 +108,6 @@
for (int i=0; i<LUCENE_SPECIAL.length; i++) {
query = replaceAll(query, LUCENE_SPECIAL[i], ESCAPED_LUCENE_SPECIAL[i]);
}
-
- System.out.println("query = " + query);
-
return query;
}
Modified: trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/action/org/jboss/blog/session/security/SecurityModBean.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -87,6 +87,10 @@
return externalSecurityService.getMapping(FeedsSecurityRole.FEED_ADMIN, feed.getId()).getGroups();
}
+ public List<SecurityGroup> getFeedViewersGroups(Feed feed) {
+ return externalSecurityService.getMapping(FeedsSecurityRole.VIEW, feed.getId()).getGroups();
+ }
+
public List<SecurityUser> getAdministratorUsers() {
return externalSecurityService.getMapping(FeedsSecurityRole.ADMIN, null).getUsers();
}
@@ -99,12 +103,17 @@
return externalSecurityService.getMapping(FeedsSecurityRole.FEED_ADMIN, feed.getId()).getUsers();
}
+ public List<SecurityUser> getFeedViewersUsers(Feed feed) {
+ return externalSecurityService.getMapping(FeedsSecurityRole.VIEW, feed.getId()).getUsers();
+ }
+
private SecurityMapping getMapping() {
Integer idForRole;
switch (getRole()) {
case GROUP_ADMIN: idForRole = getGroup().getId(); break;
case FEED_ADMIN: idForRole = getFeed().getId(); break;
+ case VIEW: idForRole = getFeed().getId(); break;
default: idForRole = null;
}
@@ -125,6 +134,7 @@
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;
+ case VIEW: bundleId = "blog.security.group.feedview.added"; param = getFeed().getName(); break;
default: return;
}
@@ -150,6 +160,7 @@
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;
+ case VIEW: bundleId = "blog.security.group.feedview.deleted"; param = getFeed().getName(); break;
default: return;
}
@@ -171,6 +182,7 @@
case ADMIN: bundleId = "blog.security.user.admin.added"; break;
case GROUP_ADMIN: bundleId = "blog.security.user.group.added"; param = getGroup().getDisplayName(); break;
case FEED_ADMIN: bundleId = "blog.security.user.feed.added"; param = getFeed().getName(); break;
+ case VIEW: bundleId = "blog.security.user.feedview.added"; param = getFeed().getName(); break;
default: return;
}
@@ -196,6 +208,7 @@
case ADMIN: bundleId = "blog.security.user.admin.deleted"; break;
case GROUP_ADMIN: bundleId = "blog.security.user.group.deleted"; param = getGroup().getDisplayName(); break;
case FEED_ADMIN: bundleId = "blog.security.user.feed.deleted"; param = getFeed().getName(); break;
+ case VIEW: bundleId = "blog.security.user.feedview.deleted"; param = getFeed().getName(); break;
default: return;
}
Added: trunk/src/action/org/jboss/blog/session/security/filtering/FeedsSecurity.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/filtering/FeedsSecurity.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/filtering/FeedsSecurity.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -0,0 +1,36 @@
+package org.jboss.blog.session.security.filtering;
+
+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.blog.session.security.FeedsIdentity;
+import org.jboss.blog.model.feed.Feed;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Name("feedsSecurity")
+ at Scope(ScopeType.STATELESS)
+ at AutoCreate
+public class FeedsSecurity {
+ @In
+ private FeedsIdentity identity;
+
+ public List<Feed> filterViewableFeeds(List<Feed> feeds) {
+ ArrayList<Feed> ret = new ArrayList<Feed>();
+
+ for (Feed feed : feeds) {
+ boolean isFeedRestricted = feed.getRestricted();
+ if (!isFeedRestricted || identity.hasPermission("feed", "view", feed)) {
+ ret.add(feed);
+ }
+ }
+
+ return ret;
+ }
+}
Added: trunk/src/action/org/jboss/blog/session/security/tools/FeedSecurityTools.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/tools/FeedSecurityTools.java (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/tools/FeedSecurityTools.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -0,0 +1,23 @@
+package org.jboss.blog.session.security.tools;
+
+import org.jboss.blog.model.feed.RestrictedFeed;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.Component;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class FeedSecurityTools {
+ public static boolean canViewFeed(RestrictedFeed feed, boolean restricted) {
+ if (!feed.getRestricted()) {
+ return true;
+ }
+
+ if (!restricted) {
+ return false;
+ }
+
+ Identity identity = (Identity) Component.getInstance(Identity.class);
+ return identity.hasPermission("feed", "view", feed);
+ }
+}
Modified: trunk/src/model/org/jboss/blog/model/Post.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/Post.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/model/org/jboss/blog/model/Post.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -212,6 +212,11 @@
}
public int compareTo(RestrictedPost post2) {
- return - GeneralTools.compareDates(getPublished(), post2.getPublished());
+ int result = - GeneralTools.compareDates(getPublished(), post2.getPublished());
+ if (result == 0) {
+ return GeneralTools.compareStrings(getTitleAsId(), post2.getTitleAsId());
+ } else {
+ return result;
+ }
}
}
Modified: trunk/src/model/org/jboss/blog/model/feed/Feed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/Feed.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/model/org/jboss/blog/model/feed/Feed.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -81,6 +81,9 @@
@Column
private Boolean showDelicious;
+ @Column
+ private Boolean restricted;
+
public Integer getId() {
return id;
}
@@ -209,6 +212,14 @@
this.showDelicious = showDelicious;
}
+ public Boolean getRestricted() {
+ return restricted;
+ }
+
+ public void setRestricted(Boolean restricted) {
+ this.restricted = restricted;
+ }
+
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Feed)) return false;
Modified: trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/model/org/jboss/blog/model/feed/RestrictedFeed.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -27,4 +27,6 @@
Boolean getShowDzone();
Boolean getShowDelicious();
+
+ Boolean getRestricted();
}
Modified: trunk/src/model/org/jboss/blog/model/security/FeedsSecurityRole.java
===================================================================
--- trunk/src/model/org/jboss/blog/model/security/FeedsSecurityRole.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/model/org/jboss/blog/model/security/FeedsSecurityRole.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -6,5 +6,6 @@
public enum FeedsSecurityRole {
ADMIN,
GROUP_ADMIN,
- FEED_ADMIN
+ FEED_ADMIN,
+ VIEW
}
Modified: trunk/src/services/org/jboss/blog/service/FeedsService.java
===================================================================
--- trunk/src/services/org/jboss/blog/service/FeedsService.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/services/org/jboss/blog/service/FeedsService.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -17,5 +17,15 @@
List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to);
+ /**
+ *
+ * @param feed Feed of which posts to get.
+ * @param from Starting post.
+ * @param to Ending post.
+ * @param restricted Should restricted posts be included?
+ * @return A list of posts of the given feed, of length max. to-from.
+ */
+ List<? extends RestrictedPost> getPosts(RestrictedFeed feed, int from, int to, boolean restricted);
+
List<? extends RestrictedPost> getPosts(int from, int to);
}
Modified: trunk/src/shotoku/org/jboss/blog/session/feed/dao/ShotokuFeedDao.java
===================================================================
--- trunk/src/shotoku/org/jboss/blog/session/feed/dao/ShotokuFeedDao.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/shotoku/org/jboss/blog/session/feed/dao/ShotokuFeedDao.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -9,6 +9,7 @@
import org.jboss.seam.Component;
import java.util.List;
+import java.util.ArrayList;
/**
* @author Adam Warski (adam at warski dot org)
@@ -25,7 +26,7 @@
this.shotokuFeed = shotokuFeed;
}
- public List<? extends RestrictedPost> getPosts(int from, int to) {
+ public List<? extends RestrictedPost> getPosts(int from, int to, boolean restricted) {
return ((DatabaseFeedPosts) Component.getInstance("databaseFeedPosts")).getPosts(
shotokuFeed, from, to);
}
Modified: trunk/src/tools/org/jboss/blog/tools/GeneralTools.java
===================================================================
--- trunk/src/tools/org/jboss/blog/tools/GeneralTools.java 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/src/tools/org/jboss/blog/tools/GeneralTools.java 2008-04-26 10:11:18 UTC (rev 293)
@@ -142,6 +142,20 @@
}
}
+ public static int compareStrings(String str1, String str2) {
+ if (str1 == null) {
+ if (str2 == null) {
+ return 0;
+ } else {
+ return -1;
+ }
+ } else if (str2 == null) {
+ return 1;
+ } else {
+ return str1.compareTo(str2);
+ }
+ }
+
public static String readInputStream(InputStream is) throws IOException {
StringBuffer contents = new StringBuffer();
Modified: trunk/view/home.xhtml
===================================================================
--- trunk/view/home.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/home.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -54,6 +54,28 @@
</ui:repeat>
</table>
</s:fragment>
+
+ <s:fragment rendered="#{identity.loggedIn}">
+ <s:fragment rendered="#{feedsSecurity.filterViewableFeeds(groupsService.restrictedFeeds(group)).size() > 0}">
+ <h4>#{group.displayName} (restricted)</h4>
+ <table cellspacing="5" class="laundrytable" width="75%">
+ <tr>
+ <th width="200px">Feed Author</th>
+ <th width="480px">Feed Title</th>
+ </tr>
+ <ui:repeat var="feed" value="#{feedsSecurity.filterViewableFeeds(groupsService.restrictedFeeds(group))}">
+ <tr>
+ <td>#{feed.author}</td>
+ <td>
+ <s:link view="/view/feed.xhtml" value="#{feed.title}" propagation="none">
+ <f:param name="name" value="#{feed.name}"/>
+ </s:link>
+ </td>
+ </tr>
+ </ui:repeat>
+ </table>
+ </s:fragment>
+ </s:fragment>
</ui:repeat>
</div>
</ui:define>
Modified: trunk/view/manage/feed_add.xhtml
===================================================================
--- trunk/view/manage/feed_add.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/manage/feed_add.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -15,6 +15,7 @@
<ui:define name="body">
<ui:include src="feed_mod.xhtml">
<ui:param name="new" value="true" />
+ <ui:param name="advanced" value="true" />
</ui:include>
</ui:define>
</ui:composition>
Modified: trunk/view/manage/feed_edit.xhtml
===================================================================
--- trunk/view/manage/feed_edit.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/manage/feed_edit.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -15,6 +15,7 @@
<ui:define name="body">
<ui:include src="feed_mod.xhtml">
<ui:param name="new" value="false" />
+ <ui:param name="advanced" value="true" />
</ui:include>
</ui:define>
</ui:composition>
Modified: trunk/view/manage/feed_mod.xhtml
===================================================================
--- trunk/view/manage/feed_mod.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/manage/feed_mod.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -142,6 +142,13 @@
<h:selectBooleanCheckbox id="showDzone" value="#{feedMod.feed.showDzone}" />
</h:panelGroup>
+<h:outputLabel for="restricted" rendered="#{advanced}">
+ This is a restricted feed, viewable only by authorized users:
+</h:outputLabel>
+<h:panelGroup rendered="#{advanced}">
+ <h:selectBooleanCheckbox id="restricted" value="#{feedMod.feed.restricted}" />
+</h:panelGroup>
+
<!--<h:outputLabel><span class="required">*</span> Xml templates:</h:outputLabel>
<h:panelGroup>
<h:dataTable var="templateType" value="#{feedMod.templateTypes}">
Modified: trunk/view/manage/feed_propose.xhtml
===================================================================
--- trunk/view/manage/feed_propose.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/manage/feed_propose.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -15,6 +15,7 @@
<ui:define name="body">
<ui:include src="feed_mod.xhtml">
<ui:param name="new" value="true" />
+ <ui:param name="advanced" value="false" />
</ui:include>
</ui:define>
</ui:composition>
Modified: trunk/view/manage/index.xhtml
===================================================================
--- trunk/view/manage/index.xhtml 2008-04-24 13:34:27 UTC (rev 292)
+++ trunk/view/manage/index.xhtml 2008-04-26 10:11:18 UTC (rev 293)
@@ -121,6 +121,37 @@
</tr>
</s:fragment>
</a:repeat>
+
+ <a:repeat var="feed" value="#{groupsService.restrictedFeeds(group)}">
+ <s:fragment rendered="#{(identity.hasPermission('feed', 'edit', feed, group) ||
+ identity.hasPermission('feed', 'delete', feed, group)) and
+ identity.hasPermission('feed', 'view', feed)}">
+ <tr class="evenRow">
+ <td class="rowlinefirst" style="font-weight:bold;">#{feed.title} (restricted)</td>
+ <td class="rowline">#{feed.name}</td>
+ <td class="rowline">#{feedTypes.getFeedType(feed).name()}</td>
+ <td class="rowline">
+ <s:link view="/manage/feed_edit.xhtml" value="Edit common"
+ rendered="#{identity.hasPermission('feed', 'edit', feed, group)}">
+ <f:param name="name" value="#{feed.name}" />
+ </s:link>
+ </td>
+ <td class="rowline">
+ <s:link view="#{feedTypes.getFeedType(feed).editPage()}" value="Edit specific"
+ rendered="#{identity.hasPermission('feed', 'edit', feed, group)}">
+ <f:param name="name" value="#{feed.name}" />
+ </s:link>
+ </td>
+ <td class="rowline">
+ <s:link view="/manage/feed_delete.xhtml" action="#{feedMod.delete}" value="Delete"
+ onclick="if (!confirm('Are you sure you want to delete this feed?')) return false"
+ rendered="#{identity.hasPermission('feed', 'delete', feed, group)}">
+ <f:param name="name" value="#{feed.name}" />
+ </s:link>
+ </td>
+ </tr>
+ </s:fragment>
+ </a:repeat>
</s:fragment>
</ui:repeat>
</table>
More information about the jboss-cvs-commits
mailing list