Initial updates to support permissions
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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')},
|
||||||
|
])
|
||||||
|
|||||||
@@ -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],
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ INSTALLED_APPS = (
|
|||||||
'filetransfers',
|
'filetransfers',
|
||||||
'converter',
|
'converter',
|
||||||
'ocr',
|
'ocr',
|
||||||
|
'permissions',
|
||||||
)
|
)
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = (
|
TEMPLATE_CONTEXT_PROCESSORS = (
|
||||||
|
|||||||
Reference in New Issue
Block a user