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
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

View File

@@ -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')},
])

View File

@@ -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],

View File

@@ -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

View File

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