Index: /quintagroup.portlet.static/trunk/docs/HISTORY.txt
===================================================================
--- /quintagroup.portlet.static/trunk/docs/HISTORY.txt	(revision 3335)
+++ /quintagroup.portlet.static/trunk/docs/HISTORY.txt	(revision 3336)
@@ -1,4 +1,10 @@
 Changelog
 =========
+
+In next release ...
+
+* Changed option to display portlet for anonymous users only to
+  instead two settings respectively requiring and excluding users with
+  a given role (from a set of roles), e.g. "Member".
 
 0.5 - September 26, 2011
Index: /quintagroup.portlet.static/trunk/quintagroup/portlet/static/configure.zcml
===================================================================
--- /quintagroup.portlet.static/trunk/quintagroup/portlet/static/configure.zcml	(revision 3335)
+++ /quintagroup.portlet.static/trunk/quintagroup/portlet/static/configure.zcml	(revision 3336)
@@ -47,3 +47,8 @@
         />
 
+    <utility
+        component=".vocabularies.GlobalRolesVocabulary"
+        name="quintagroup.portlet.static.vocabularies.GlobalRoles"
+        />
+
 </configure>
Index: /quintagroup.portlet.static/trunk/quintagroup/portlet/static/staticstylishportlet.py
===================================================================
--- /quintagroup.portlet.static/trunk/quintagroup/portlet/static/staticstylishportlet.py	(revision 3335)
+++ /quintagroup.portlet.static/trunk/quintagroup/portlet/static/staticstylishportlet.py	(revision 3336)
@@ -24,9 +24,20 @@
     """
 
-    anonymous_only = schema.Bool(
-        title=_(u"Anonymous only"),
-        description=_(u"Check this to hide the portlet for logged-in users."),
+    roles_excluded = schema.Tuple(
+        title=_(u"Roles excluded"),
+        description=_(u"Select excluded user roles."),
+        value_type=schema.Choice(
+            vocabulary="quintagroup.portlet.static.vocabularies.GlobalRoles"
+            ),
         required=False,
-        default=False,
+        )
+
+    roles_required = schema.Tuple(
+        title=_(u"Roles required"),
+        description=_(u"Select required user roles."),
+        value_type=schema.Choice(
+            vocabulary="quintagroup.portlet.static.vocabularies.GlobalRoles"
+            ),
+        required=False,
         )
 
@@ -50,13 +61,18 @@
     styling = ''
 
-    anonymous_only = False
+    roles_excluded = ()
+
+    roles_required = ()
 
     def __init__(self, header=u"", text=u"", omit_border=False, footer=u"",
-                 more_url='', hide=False, styling='', anonymous_only=False):
+                 more_url='', hide=False, styling='',
+                 roles_excluded=(), roles_required=()):
         super(Assignment, self).__init__(header=header, text=text, omit_border=omit_border, footer=footer,
                                          more_url=more_url)
 
         self.styling = styling
-        self.anonymous_only = anonymous_only
+        self.roles_excluded = roles_excluded
+        self.roles_required = roles_required
+
 
 class Renderer(static.Renderer):
@@ -72,8 +88,25 @@
     @property
     def available(self):
-        if self.data.anonymous_only:
+        if self.data.roles_excluded or self.data.roles_required:
             context = aq_inner(self.context)
             mtool = getToolByName(context, 'portal_membership')
-            return mtool.isAnonymousUser()
+
+            # Determine roles
+            if not mtool.isAnonymousUser():
+                member = mtool.getAuthenticatedMember()
+                user = member.getUser()
+                roles = user.getRoles()
+            else:
+                roles = ()
+
+            roles = frozenset(roles)
+
+            # Test excluded roles
+            if roles & set(self.data.roles_excluded):
+                return False
+
+            # Test required roles
+            if not set(self.data.roles_required) <= roles:
+                return False
 
         return True
Index: /quintagroup.portlet.static/trunk/quintagroup/portlet/static/vocabularies.py
===================================================================
--- /quintagroup.portlet.static/trunk/quintagroup/portlet/static/vocabularies.py	(revision 3335)
+++ /quintagroup.portlet.static/trunk/quintagroup/portlet/static/vocabularies.py	(revision 3336)
@@ -2,4 +2,5 @@
 from zope.interface import implements
 from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
+from zope.i18n import translate
 
 from Products.CMFCore.utils import getToolByName
@@ -41,2 +42,19 @@
 
 PortletCSSVocabulary = PortletCSSVocabulary()
+
+
+class GlobalRolesVocabulary(object):
+    implements(IVocabularyFactory)
+
+    def __call__(self, context):
+        roles = context.getGlobalPortalRoles()
+
+        return SimpleVocabulary(
+            [SimpleTerm(
+                role, role,
+                translate(role, domain="plone", context=context.REQUEST) \
+                ) for role in roles]
+            )
+
+
+GlobalRolesVocabulary = GlobalRolesVocabulary()
