Index: main/waeup.ikoba/trunk/src/waeup/ikoba/browser/pages.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/browser/pages.py	(revision 12816)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/browser/pages.py	(revision 12842)
@@ -975,4 +975,8 @@
             if not x.util_name in ikoba_utils.BATCH_PROCESSOR_NAMES:
                 continue
+            # Skip User Processor if user isn't allowed to manage users.
+            if x.util_name == 'userprocessor' and not checkPermission(
+                'waeup.manageUsers', self.context):
+                continue
             iface_fields = schema.getFields(x.iface)
             available_fields = []
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/browser/tests/test_browser.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/browser/tests/test_browser.py	(revision 12842)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/browser/tests/test_browser.py	(revision 12842)
@@ -0,0 +1,97 @@
+## $Id: test_browser.py 12840 2015-04-01 08:35:16Z henrik $
+##
+## Copyright (C) 2015 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""
+Extends the doctests in browser.txt and datacenter.txt.
+"""
+import shutil
+import tempfile
+import os
+from zc.async.testing import wait_for_result
+from zope.component import createObject, getUtility
+from zope.component.hooks import setSite, clearSite
+from zope.security.interfaces import Unauthorized
+from zope.securitypolicy.interfaces import IPrincipalRoleManager
+from zope.testbrowser.testing import Browser
+from waeup.ikoba.testing import FunctionalLayer, FunctionalTestCase
+from waeup.ikoba.app import Company
+from waeup.ikoba.interfaces import IJobManager
+from waeup.ikoba.tests.test_async import FunctionalAsyncTestCase
+
+
+class CompanySetup(FunctionalTestCase):
+    # A test case that only contains a setup and teardown
+
+    layer = FunctionalLayer
+
+    def setUp(self):
+        super(CompanySetup, self).setUp()
+
+        # Setup a sample site for each test
+        app = Company()
+        self.dc_root = tempfile.mkdtemp()
+        app['datacenter'].setStoragePath(self.dc_root)
+
+        # Prepopulate the ZODB...
+        self.getRootFolder()['app'] = app
+        # we add the site immediately after creation to the
+        # ZODB. Catalogs and other local utilities are not setup
+        # before that step.
+        self.app = self.getRootFolder()['app']
+        # Set site here. Some of the following setup code might need
+        # to access grok.getSite() and should get our new app then
+        setSite(app)
+
+        # Prepare test browser
+        self.browser = Browser()
+        self.browser.handleErrors = False
+
+        self.datacenter_path = 'http://localhost/app/datacenter'
+
+    def tearDown(self):
+        super(CompanySetup, self).tearDown()
+        clearSite()
+        shutil.rmtree(self.dc_root)
+
+
+class DataCenterUITests(CompanySetup):
+    # Tests for DataCenter class views and pages
+
+    layer = FunctionalLayer
+
+    def test_user_data_import_permission(self):
+        upload_path = 'http://localhost/app/datacenter/upload'
+        login_path = 'http://localhost/app/login'
+        # Create  officer
+        self.app['users'].addUser('officer', 'officersecret')
+        self.app['users']['officer'].email = 'mrofficer@foo.ng'
+        self.app['users']['officer'].title = 'Carlo Pitter'
+        # Assign role
+        prm = IPrincipalRoleManager(self.app)
+        prm.assignRoleToPrincipal('waeup.ImportManager', 'officer')
+        # Login
+        self.browser.open(login_path)
+        self.browser.getControl(name="form.login").value = 'officer'
+        self.browser.getControl(name="form.password").value = 'officersecret'
+        self.browser.getControl("Login").click()
+        self.browser.open(upload_path)
+        self.assertFalse('User Processor' in self.browser.contents)
+        # Assign role which is necessary to import user data
+        prm.assignRoleToPrincipal('waeup.UsersManager', 'officer')
+        self.browser.open(upload_path)
+        self.assertTrue('User Processor' in self.browser.contents)
+        return
