1
0
Эх сурвалжийг харах

Different rights management backends

Initially only one backend - regular expressions based
Sergey Fursov 12 жил өмнө
parent
commit
dca10fa14e

+ 3 - 0
config

@@ -100,6 +100,9 @@ committer = Firstname Lastname <Radicale@Radicale.org>
 
 
 [rights]
+# Rights backend
+backend = "regex"
+
 # Rights management method
 # Value: None | owner_only | owner_write | from_file
 type = None

+ 1 - 0
radicale/__init__.py

@@ -127,6 +127,7 @@ class Application(object):
         super(Application, self).__init__()
         auth.load()
         storage.load()
+        rights.load()
         self.encoding = config.get("encoding", "request")
         if config.getboolean("logging", "full_environment"):
             self.headers_log = lambda environ: environ

+ 1 - 0
radicale/config.py

@@ -75,6 +75,7 @@ INITIAL_CONFIG = {
     "git": {
         "committer": "Radicale <radicale@example.com>"},
     "rights": {
+        "backend": "regex",
         "type": "None",
         "file": "~/.config/radicale/rights"},
     "storage": {

+ 45 - 0
radicale/rights/__init__.py

@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Radicale Server - Calendar Server
+# Copyright © 2012-2013 Guillaume Ayoub
+#
+# This library is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Radicale.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Rights backends.
+
+This module loads the rights backend, according to the rights
+configuration.
+
+"""
+import sys
+
+from .. import config
+
+
+def load():
+    """Load list of available storage managers."""
+    storage_type = config.get("rights", "backend")
+    root_module = __import__(
+        "rights.%s" % storage_type, globals=globals(), level=2)
+    module = getattr(root_module, storage_type)
+    sys.modules[__name__].authorized = module.authorized
+    return module
+
+
+def authorized(user, collection, right):
+    """ Check when user has rights on collection
+    This method is overriden when appropriate rights backend loaded.
+    """
+    raise NotImplementedError()

+ 1 - 1
radicale/rights.py → radicale/rights/regex.py

@@ -38,7 +38,7 @@ Leading or ending slashes are trimmed from collection's path.
 import re
 import os.path
 
-from . import config, log
+from .. import config, log
 
 # Manage Python2/3 different modules
 # pylint: disable=F0401

+ 1 - 1
setup.py

@@ -54,7 +54,7 @@ setup(
                   "Radicale-%s.tar.gz" % radicale.VERSION),
     license="GNU GPL v3",
     platforms="Any",
-    packages=["radicale", "radicale.auth", "radicale.storage"],
+    packages=["radicale", "radicale.auth", "radicale.storage", "radicale.rights"],
     provides=["radicale"],
     scripts=["bin/radicale"],
     keywords=["calendar", "addressbook", "CalDAV", "CardDAV"],