Initial updates to support permissions

This commit is contained in:
Roberto Rosario
2011-02-12 05:45:34 -04:00
parent 0ece9d1970
commit a47ff7c4b4
5 changed files with 62 additions and 12 deletions

View File

@@ -1,5 +1,11 @@
import copy import copy
from django.db.utils import DatabaseError
from permissions.utils import has_permission
from permissions.models import Permission
object_navigation = {} object_navigation = {}
menu_links = [] menu_links = []
model_list_columns = {} model_list_columns = {}
@@ -38,3 +44,25 @@ def register_model_list_columns(model, columns):
model_list_columns[model].extend(columns) model_list_columns[model].extend(columns)
else: else:
model_list_columns[model] = copy.copy(columns) model_list_columns[model] = copy.copy(columns)
def register_permissions(app, permissions):
if permissions:
for permission in permissions:
full_permission_name = "%s_%s" % (app, permission['name'])
try:
#if not Permission.objects.filter(codename=full_permission_name):
# Permission(name=unicode(permission['label']), codename=full_permission_name).save()
permission_obj, created = Permission.objects.get_or_create(codename=full_permission_name)
permission_obj.name=unicode(permission['label'])
permission_obj.save()
except DatabaseError:
#Special case for ./manage.py syncdb
pass
def check_permissions(object, user, permission_list):
temp_role = []
for permission in permission_list:
if has_permission(object, user, permission):
return True

View File

@@ -3,7 +3,8 @@ import tempfile
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from common.api import register_links, register_menu, register_model_list_columns from common.api import register_links, register_menu, \
register_model_list_columns, register_permissions
from common.utils import pretty_size from common.utils import pretty_size
from models import Document from models import Document
@@ -33,9 +34,6 @@ register_links(['document_list', 'document_create', 'document_create_multiple',
register_links(StagingFile, [staging_file_preview, staging_file_delete]) register_links(StagingFile, [staging_file_preview, staging_file_delete])
register_model_list_columns(Document, [ register_model_list_columns(Document, [
#{'name':_(u'mimetype'), 'attribute':'file_mimetype'},
#{'name':_(u'added'), 'attribute':lambda x: x.date_added.date()},
#{'name':_(u'file size'), 'attribute':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'},
{'name':_(u'thumbnail'), 'attribute': {'name':_(u'thumbnail'), 'attribute':
lambda x: '<a class="fancybox" href="%s"><img src="%s" /></a>' % (reverse('document_preview', args=[x.id]), lambda x: '<a class="fancybox" href="%s"><img src="%s" /></a>' % (reverse('document_preview', args=[x.id]),
reverse('document_thumbnail', args=[x.id])) reverse('document_thumbnail', args=[x.id]))
@@ -53,9 +51,20 @@ register_menu([
TEMPORARY_DIRECTORY = documents_settings.TEMPORARY_DIRECTORY if documents_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp() TEMPORARY_DIRECTORY = documents_settings.TEMPORARY_DIRECTORY if documents_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp()
#','.join([metadata for metadata in document.documentmetadata_set.all()]) PERMISSION_DOCUMENT_CREATE = 'document_create'
# initial.append({ PERMISSION_DOCUMENT_PROPERTIES_EDIT = 'document_properties_edit'
# 'metadata_type':metadata.metadata_type, PERMISSION_DOCUMENT_METADATA_EDIT = 'document_metadata_edit'
# 'document_type':document.document_type, PERMISSION_DOCUMENT_VIEW = 'document_view'
# 'value':metadata.value, PERMISSION_DOCUMENT_DELETE = 'document_delete'
# }) PERMISSION_DOCUMENT_OCR = 'document_ocr'
PERMISSION_DOCUMENT_DOWNLOAD = 'document_download'
register_permissions('documents', [
{'name':PERMISSION_DOCUMENT_CREATE, 'label':_(u'Create document')},
{'name':PERMISSION_DOCUMENT_PROPERTIES_EDIT, 'label':_(u'Edit document properties')},
{'name':PERMISSION_DOCUMENT_METADATA_EDIT, 'label':_(u'Edit document metadata')},
{'name':PERMISSION_DOCUMENT_VIEW, 'label':_(u'View document')},
{'name':PERMISSION_DOCUMENT_DELETE, 'label':_(u'Delete document')},
{'name':PERMISSION_DOCUMENT_OCR, 'label':_(u'Submit document for OCR')},
{'name':PERMISSION_DOCUMENT_DOWNLOAD, 'label':_(u'Download document')},
])

View File

@@ -1,17 +1,17 @@
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, get_object_or_404, redirect from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.template import RequestContext from django.template import RequestContext
from django.contrib import messages from django.contrib import messages
from django.views.generic.list_detail import object_detail, object_list from django.views.generic.list_detail import object_detail, object_list
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.views.generic.create_update import create_object, delete_object, update_object from django.views.generic.create_update import create_object, delete_object, update_object
#from django.forms.formsets import formset_factory
from django.core.files.base import File from django.core.files.base import File
from django.conf import settings from django.conf import settings
from django.utils.http import urlencode from django.utils.http import urlencode
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify
from filetransfers.api import serve_file from filetransfers.api import serve_file
from converter.api import convert, in_image_cache, QUALITY_DEFAULT from converter.api import convert, in_image_cache, QUALITY_DEFAULT
from common.utils import pretty_size from common.utils import pretty_size
@@ -35,6 +35,13 @@ from documents.conf.settings import THUMBNAIL_SIZE
from documents.conf.settings import GROUP_MAX_RESULTS from documents.conf.settings import GROUP_MAX_RESULTS
from documents.conf.settings import GROUP_SHOW_EMPTY from documents.conf.settings import GROUP_SHOW_EMPTY
from documents import PERMISSION_DOCUMENT_CREATE, \
PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_PROPERTIES_EDIT, \
PERMISSION_DOCUMENT_METADATA_EDIT, PERMISSION_DOCUMENT_VIEW, \
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_OCR, \
PERMISSION_DOCUMENT_DOWNLOAD
from utils import save_metadata, save_metadata_list, decode_metadata_from_url from utils import save_metadata, save_metadata_list, decode_metadata_from_url
def document_list(request): def document_list(request):
@@ -48,6 +55,10 @@ def document_list(request):
) )
def document_create(request, multiple=True): def document_create(request, multiple=True):
permissions = [PERMISSION_DOCUMENT_CREATE]
if not check_permissions(main_object, request.user, permissions):
raise Http404
if DocumentType.objects.all().count() == 1: if DocumentType.objects.all().count() == 1:
wizard = DocumentCreateWizard( wizard = DocumentCreateWizard(
document_type=DocumentType.objects.all()[0], document_type=DocumentType.objects.all()[0],

View File

@@ -62,3 +62,4 @@
* Handle ziped or rar archives * Handle ziped or rar archives
* Display preferences (Rotation, default zoom) * Display preferences (Rotation, default zoom)
* Gallery view for document groups * Gallery view for document groups
* Assign default role to new users

View File

@@ -126,6 +126,7 @@ INSTALLED_APPS = (
'filetransfers', 'filetransfers',
'converter', 'converter',
'ocr', 'ocr',
'permissions',
) )
TEMPLATE_CONTEXT_PROCESSORS = ( TEMPLATE_CONTEXT_PROCESSORS = (