Browse Source

Search ACL added.

Ralfp 12 years ago
parent
commit
200bc9decd
3 changed files with 49 additions and 0 deletions
  1. 40 0
      misago/acl/permissions/search.py
  2. 8 0
      misago/fixtures/userroles.py
  3. 1 0
      misago/settings_base.py

+ 40 - 0
misago/acl/permissions/search.py

@@ -0,0 +1,40 @@
+from django.utils.translation import ugettext_lazy as _
+from django import forms
+from misago.acl.builder import BaseACL
+from misago.forms import YesNoSwitch
+
+def make_form(request, role, form):
+    form.base_fields['can_search_forums'] = forms.BooleanField(widget=YesNoSwitch, initial=False, required=False)
+    form.base_fields['search_cooldown'] = forms.IntegerField(initial=25, min_value=0)
+    form.layout.append((_("Searching"),
+                        (
+                         ('can_search_forums', {'label': _("Can search community")}),
+                         ('search_cooldown', {'label': _("Minimum delay between searches"), 'help_text': _("Forum search can be resources intensive operation, and so its usually good idea to limit frequency of searches by requiring members to wait certain number of seconds before they can perform next search. Enter 0 to disable this requirement.")}),
+                         )
+                        ))
+
+
+class SearchACL(BaseACL):
+    def can_search(self):
+        return self.acl['can_search_forums']
+
+    def search_cooldown(self):
+        return self.acl['search_cooldown']
+
+    def allow_search(self, user):
+        pass
+
+
+def build(acl, roles):
+    acl.search = SearchACL()
+    acl.search.acl['can_search_forums'] = False
+    acl.search.acl['search_cooldown'] = 25
+
+    for role in roles:
+        try:
+            if role['can_search_forums']:
+                acl.search.acl['can_search_forums'] = True
+            if role['search_cooldown'] < acl.search.acl['search_cooldown']:
+                acl.search.acl['search_cooldown'] = role['search_cooldown']
+        except KeyError:
+            pass

+ 8 - 0
misago/fixtures/userroles.py

@@ -6,6 +6,8 @@ def load():
     role.permissions = {
                         'name_changes_allowed': 5,
                         'changes_expire': 7,
+                        'can_search_forums': True,
+                        'search_cooldown': 0,
                         'can_use_acp': True,
                         'can_use_mcp': True,
                         'can_use_signature': True,
@@ -35,6 +37,8 @@ def load():
     role.permissions = {
                         'name_changes_allowed': 3,
                         'changes_expire': 14,
+                        'can_search_forums': True,
+                        'search_cooldown': 0,
                         'can_use_mcp': True,
                         'can_use_signature': True,
                         'allow_signature_links': True,
@@ -59,6 +63,8 @@ def load():
     role = Role(name=_("Registered").message, _special='registered')
     role.permissions = {
                         'name_changes_allowed': 2,
+                        'can_search_forums': True,
+                        'search_cooldown': 20,
                         'can_use_signature': False,
                         'can_search_users': True,
                         'can_use_private_threads': True,
@@ -75,6 +81,8 @@ def load():
     
     role = Role(name=_("Guest").message, _special='guest')
     role.permissions = {
+                        'can_search_forums': True,
+                        'search_cooldown': 45,
                         'can_search_users': True,
                         'forums': {4: 6, 5: 6, 6: 6},
                        }

+ 1 - 0
misago/settings_base.py

@@ -123,6 +123,7 @@ MIDDLEWARE_CLASSES = (
 # List of application permission providers
 PERMISSION_PROVIDERS = (
     'misago.acl.permissions.usercp',
+    'misago.acl.permissions.search',
     'misago.acl.permissions.users',
     'misago.acl.permissions.forums',
     'misago.acl.permissions.threads',