Initial updates to support permissions
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
import copy
|
||||
|
||||
from django.db.utils import DatabaseError
|
||||
|
||||
from permissions.utils import has_permission
|
||||
from permissions.models import Permission
|
||||
|
||||
|
||||
object_navigation = {}
|
||||
menu_links = []
|
||||
model_list_columns = {}
|
||||
@@ -38,3 +44,25 @@ def register_model_list_columns(model, columns):
|
||||
model_list_columns[model].extend(columns)
|
||||
else:
|
||||
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
|
||||
|
||||
@@ -3,7 +3,8 @@ import tempfile
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
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 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_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':
|
||||
lambda x: '<a class="fancybox" href="%s"><img src="%s" /></a>' % (reverse('document_preview', 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()
|
||||
|
||||
#','.join([metadata for metadata in document.documentmetadata_set.all()])
|
||||
# initial.append({
|
||||
# 'metadata_type':metadata.metadata_type,
|
||||
# 'document_type':document.document_type,
|
||||
# 'value':metadata.value,
|
||||
# })
|
||||
PERMISSION_DOCUMENT_CREATE = 'document_create'
|
||||
PERMISSION_DOCUMENT_PROPERTIES_EDIT = 'document_properties_edit'
|
||||
PERMISSION_DOCUMENT_METADATA_EDIT = 'document_metadata_edit'
|
||||
PERMISSION_DOCUMENT_VIEW = 'document_view'
|
||||
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')},
|
||||
])
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
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.template import RequestContext
|
||||
from django.contrib import messages
|
||||
from django.views.generic.list_detail import object_detail, object_list
|
||||
from django.core.urlresolvers import reverse
|
||||
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.conf import settings
|
||||
from django.utils.http import urlencode
|
||||
from django.template.defaultfilters import slugify
|
||||
|
||||
|
||||
from filetransfers.api import serve_file
|
||||
from converter.api import convert, in_image_cache, QUALITY_DEFAULT
|
||||
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_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
|
||||
|
||||
def document_list(request):
|
||||
@@ -48,6 +55,10 @@ def document_list(request):
|
||||
)
|
||||
|
||||
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:
|
||||
wizard = DocumentCreateWizard(
|
||||
document_type=DocumentType.objects.all()[0],
|
||||
|
||||
@@ -62,3 +62,4 @@
|
||||
* Handle ziped or rar archives
|
||||
* Display preferences (Rotation, default zoom)
|
||||
* Gallery view for document groups
|
||||
* Assign default role to new users
|
||||
|
||||
@@ -126,6 +126,7 @@ INSTALLED_APPS = (
|
||||
'filetransfers',
|
||||
'converter',
|
||||
'ocr',
|
||||
'permissions',
|
||||
)
|
||||
|
||||
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||
|
||||
Reference in New Issue
Block a user