src/ldt/ldt/security/command.py
author cavaliet
Mon, 24 Jun 2013 10:59:11 +0200
changeset 1215 125ea12cce61
parent 1191 b6e0b1811723
child 1238 ffa5e70f643f
permissions -rw-r--r--
temporary modif removed and version number to 1.50.4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
     1
from django.conf import settings
1191
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     2
from django.contrib.auth import get_user_model
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     3
from django.contrib.auth.models import Group
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 549
diff changeset
     4
from guardian.shortcuts import assign, remove_perm
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
     5
from ldt.ldt_utils.models import Project, Content
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
     6
from ldt.management.utils import show_progress
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
     7
1191
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     8
User = get_user_model()
b6e0b1811723 Migrate to django 1.5 :
ymh <ymh.work@gmail.com>
parents: 1190
diff changeset
     9
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    10
def set_default_permissions(verbose=False, is_migration=False, orm=None):
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    11
    writer = None
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    12
    
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    13
    
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    14
    if is_migration:
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    15
        list_model = {'User': orm['auth.user'],
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    16
                      'Group': orm['auth.group'],
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    17
                      'Project': orm.Project,
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    18
                      'Content': orm.Content
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    19
                      }
334
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    20
    else:
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    21
        list_model = {'Project': Project,
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    22
                  'Content': Content,
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    23
                  'User': User,
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    24
                  'Group': Group
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    25
                  }
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    26
    
1190
129d45eec68c Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents: 549
diff changeset
    27
    everyone, _ = Group.objects.get_or_create(name=settings.PUBLIC_GROUP_NAME)     
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    28
     
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    29
    if verbose:   
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    30
        total = list_model['Project'].objects.count()
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    31
        
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    32
    for i, proj in enumerate(list_model['Project'].objects.all()):
515
d1be4a4f6639 Fix bugs in permissions
verrierj
parents: 510
diff changeset
    33
        
d1be4a4f6639 Fix bugs in permissions
verrierj
parents: 510
diff changeset
    34
        if proj.state == 2:
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    35
            assign('ldt_utils.view_project', everyone, proj)
515
d1be4a4f6639 Fix bugs in permissions
verrierj
parents: 510
diff changeset
    36
        else:
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    37
            remove_perm('ldt_utils.view_project', everyone, proj)
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    38
        
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    39
        assign('ldt_utils.view_project', proj.owner, proj)
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    40
        assign('ldt_utils.change_project', proj.owner, proj)            
515
d1be4a4f6639 Fix bugs in permissions
verrierj
parents: 510
diff changeset
    41
            
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    42
        if verbose:
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    43
            writer = show_progress(i, total, "Assign permissions to projects", 40, writer)
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    44
        
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    45
    for published_proj in list_model['Project'].objects.filter(state=2):
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    46
        assign('ldt_utils.view_project', everyone, published_proj)
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    47
    
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    48
    if verbose:    
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    49
        writer = None
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    50
        total = list_model['User'].objects.count()
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    51
        
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    52
    for i, user in enumerate(list_model['User'].objects.all()):
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    53
        everyone.user_set.add(user) 
510
496917cf614a Commands display progress bars
verrierj
parents: 503
diff changeset
    54
        if verbose:
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    55
            writer = show_progress(i, total, "Assign permissions to groups", 40, writer)         
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    56
          
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    57
        for group in user.groups.exclude(name=settings.PUBLIC_GROUP_NAME):
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    58
            for proj in list_model['Project'].objects.filter(owner=user):
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    59
                assign('ldt_utils.view_project', group, proj)
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    60
            
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    61
        for content in list_model['Content'].objects.all():
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    62
            if user.has_perm('view_content', content):
334
b4b11979cd4a Specify explicit app name when assigning permissions when using comand assignpermissions
verrierj
parents: 331
diff changeset
    63
                assign('ldt_utils.view_media', user, content.media_obj)
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    64
    
503
4be5eba42451 Contents objects are not public by default
verrierj
parents: 334
diff changeset
    65
                
331
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    66
    for admin in list_model['User'].objects.filter(is_superuser=True):
9978257745a5 Add command to set default permission (./manage.py assignpermissions) + corrected migration order
verrierj
parents:
diff changeset
    67
        for g in list_model['Group'].objects.all():
549
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    68
            g.user_set.add(admin)
0313c23ffe7e Minor bugs about permission caching
verrierj
parents: 515
diff changeset
    69