Metadata-Version: 1.1
Name: django-simple_perms
Version: 0.1
Summary: A simple class based permission backend for django
Home-page: https://bitbucket.org/hespul/django-simple_perms
Author: Fabien MICHEL
Author-email: fabien.michel@hespul.org
License: WTFPL
Description: Really simple permission backend for django
        
        Class based, No database
        
        Inspired by [django-permission](https://github.com/lambdalisue/django-permission)
        
        Tested with Django 1.10 - python 3.5
        
        # Introduction
        
        The app autodiscover perms.py module in your project's apps.
        
        This modules should register PermissionLogic based class.
        
        When calling django's has_perm method, it will run the corresponding method name in your PermissionLogic class.
        
        See usage section below for comprehensive example.
        
        # Usage
        
        *settings.py*
        
        ```python
        INSTALLED_APPS = (
          # ...
          'simple_perms',  # Add app to your INSTALLED_APPS
          # ...
        )
        
        AUTHENTICATION_BACKENDS = (
            'simple_perms.backend.PermissionBackend',  # Add permission backend before django's one
            'django.contrib.auth.backends.ModelBackend',
        )
        ```
        
        *project_app/perms.py*
        
        ```python
        from simple_perms import register, PermissionLogic
        
        
        class ProjectLogic(PermissionLogic):
        
            def add_project(self, user, project, perm):
                return True
        
            def change_project(self, user, project, perm):
                return user.is_admin() or project.owner == user
        
            delete_project = change_project
        
            def default_permission(self, user, project, perm):
              # Optional, default to global default permission, which default to False
              return user.is_admin()
        
        
        register('project_app', ProjectLogic)
        ```
        
        ```python
        user1.has_perm('project_app.add_project')  # True
        user1.has_perm('project_app.change_project', user1_project)  # True
        user1.has_perm('project_app.delete_project', user1_project)  # True
        user2.has_perm('project_app.change_project', user1_project)  # False
        admin.has_perm('project_app.change_project', user1_project)  # True
        ```
        
        # Default permission
        
        If a checked permission doesn't exists in registered PermissionLogic based classe, the backend will run the default_permission method of this class. If no default_permission defined, it default to the global default permission which default to False.
        
        **Change global default permission**
        
        *settings.py*
        
        ```python
        SIMPLE_PERMS_GLOBAL_DEFAULT_PERMISSION = 'path.to.custom_global_default_permission'
        ```
        
        *path/to.py*
        ```python
        def custom_global_default_permission(user, obj, perm):
            return user.is_admin()
        ```
        
        global_default_permission and default_permission have the same arguments as others permissions : `(user, obj, perm)`
        
        
        # Change autodiscovered perms module name
        
        simple_perms autodiscover perms.py modules in every django's apps. You can change the module name to autodiscover using the SIMPLE_PERMS_MODULE_NAME setting :
        
        ```python
        SIMPLE_PERMS_MODULE_NAME = 'permission'
        ```
        
        # Run tests
        
        ```bash
        python runtests.py
        ```
        
Platform: UNKNOWN
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 1.10
Classifier: Intended Audience :: Developers
Classifier: License :: Public Domain
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
