From 39a2f25784a76fe3f92800316e3a11fd0f3d3428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 22 Apr 2015 10:08:48 +0200 Subject: [PATCH 02/11] backoffice: include all pages from admin/ (#6726) --- wcs/backoffice/root.py | 60 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/wcs/backoffice/root.py b/wcs/backoffice/root.py index 8137cc7..ef0f8ab 100644 --- a/wcs/backoffice/root.py +++ b/wcs/backoffice/root.py @@ -42,8 +42,15 @@ from wcs.formdef import FormDef from wcs.forms.backoffice import FormDefUI +import wcs.admin.bounces +import wcs.admin.categories import wcs.admin.forms +import wcs.admin.logger +import wcs.admin.roles +import wcs.admin.settings +import wcs.admin.users import wcs.admin.workflows + from wcs import data_sources from wcs.api import get_user_from_api_query_string @@ -238,11 +245,27 @@ class WorkflowsDirectory(wcs.admin.workflows.WorkflowsDirectory): class RootDirectory(BackofficeRootDirectory): _q_exports = ['', 'management', 'pending', 'statistics'] + bounces = wcs.admin.bounces.BouncesDirectory() + categories = wcs.admin.categories.CategoriesDirectory() + forms = wcs.admin.forms.FormsDirectory() + logger = wcs.admin.logger.LoggerDirectory() + roles = wcs.admin.roles.RolesDirectory() + settings = wcs.admin.settings.SettingsDirectory() + users = wcs.admin.users.UsersDirectory() + workflows = wcs.admin.workflows.WorkflowsDirectory() + menu_items = [ ('management', N_('Management')), - ('forms/', N_('Forms'), FormsDirectory.is_accessible), - ('workflows/', N_('Workflows'), WorkflowsDirectory.is_accessible), - ('/', N_('WCS Form Server'))] + ('forms/', N_('Forms Workshop')), + ('workflows/', N_('Workflows Workshop')), + ('users/', N_('Users')), + ('roles/', N_('Roles')), + ('categories/', N_('Categories')), + ('logger/', N_('Logs')), + ('bounces/', N_('Bounces')), + ('settings/', N_('Settings')), + ('/', N_('WCS Form Server')) + ] def get_intro_text(self): return _('''Welcome.''') @@ -260,8 +283,6 @@ class RootDirectory(BackofficeRootDirectory): 'categories', 'settings', 'management'): # limit this space to menu entries that have icons. continue - if display_function and not display_function(k): - continue r += htmltext('
  • ') % (k.strip('/'), k) if callable(v): r += v() @@ -496,13 +517,32 @@ class RootDirectory(BackofficeRootDirectory): return redirect('.') def _q_lookup(self, component): - if component == 'forms': - return FormsDirectory() - if component == 'workflows': - return WorkflowsDirectory() - + if component in [str(x[0]).strip('/') for x in self.menu_items]: + if not is_accessible(component): + raise errors.AccessForbiddenError() + return getattr(self, component) return FormPage(component) + def get_menu_items(self): + if not get_request().user: + return self.menu_items + user_roles = set(get_request().user.roles or []) + if not get_cfg('admin-permissions', {}): + return self.menu_items + menu_items = self.menu_items[:] + for item in menu_items: + if len(item) == 2: + item = list(item) + [None] + k, v, display_function = item + k = k.strip(str('/')) + if not k: + continue + if display_function and not display_function(k): + continue + if is_accessible(k): + continue + menu_items.remove((k+'/', v)) + return menu_items class FakeField(object): def __init__(self, id, type_, label): -- 2.1.4