diff --git a/manila_tempest_tests/tests/api/admin/test_export_locations.py b/manila_tempest_tests/tests/api/admin/test_export_locations.py
index 67c200e..96a0d9d 100644
--- a/manila_tempest_tests/tests/api/admin/test_export_locations.py
+++ b/manila_tempest_tests/tests/api/admin/test_export_locations.py
@@ -39,7 +39,7 @@
     def resource_setup(cls):
         super(ExportLocationsTest, cls).resource_setup()
         cls.admin_client = cls.admin_shares_v2_client
-        cls.member_client = cls.shares_v2_client
+        cls.member_client = cls.admin_project_member_client.shares_v2_client
         # create share type
         cls.share_type = cls._create_share_type()
         cls.share_type_id = cls.share_type['id']
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 232b15a..89f2e92 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -24,6 +24,7 @@
 from tempest.common import credentials_factory as common_creds
 
 from tempest import config
+from tempest.lib.common import cred_client
 from tempest.lib.common import dynamic_creds
 from tempest.lib.common.utils import data_utils
 from tempest.lib import exceptions
@@ -1258,6 +1259,21 @@
     """Base test case class for all Shares API tests with all user roles."""
     credentials = ('primary', 'alt', 'admin')
 
+    # Will be cleaned up in resource_cleanup if the class
+    class_project_users_created = []
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.clear_project_users(cls.class_project_users_created)
+        super(BaseSharesMixedTest, cls).resource_cleanup()
+
+    @classmethod
+    def clear_project_users(cls, users=None):
+        users = users or cls.class_project_users_created
+        for user in users:
+            with handle_cleanup_exceptions():
+                cls.os_admin.creds_client.delete_user(user['id'])
+
     @classmethod
     def setup_clients(cls):
         super(BaseSharesMixedTest, cls).setup_clients()
@@ -1269,6 +1285,18 @@
         # Initialise network clients
         cls.os_admin.networks_client = cls.os_admin.network.NetworksClient()
         cls.os_alt.networks_client = cls.os_alt.network.NetworksClient()
+        # Initialise identity clients
+        cls.admin_project = cls.os_admin.auth_provider.auth_data[1]['project']
+        identity_clients = getattr(
+            cls.os_admin, 'identity_%s' % CONF.identity.auth_version)
+        cls.os_admin.identity_client = identity_clients.IdentityClient()
+        cls.os_admin.projects_client = identity_clients.ProjectsClient()
+        cls.os_admin.users_client = identity_clients.UsersClient()
+        cls.os_admin.roles_client = identity_clients.RolesClient()
+        cls.os_admin.domains_client = (
+            cls.os_admin.identity_v3.DomainsClient() if
+            CONF.identity.auth_version == 'v3' else None)
+        cls.admin_project_member_client = cls.create_user_and_get_client()
 
         if CONF.share.multitenancy_enabled:
             admin_share_network_id = cls.provide_share_network(
@@ -1289,6 +1317,43 @@
             cls.class_resources.insert(0, resource)
 
     @classmethod
+    def create_user_and_get_client(cls, project=None):
+        """Create a user in specified project & set share clients for user
+
+        The user will have all roles specified in tempest.conf
+        :param: project: a dictionary with project ID and name, if not
+            specified, the value will be cls.admin_project
+        """
+        project_domain_name = (
+            cls.os_admin.identity_client.auth_provider.credentials.get(
+                'project_domain_name', 'Default'))
+        cls.os_admin.creds_client = cred_client.get_creds_client(
+            cls.os_admin.identity_client, cls.os_admin.projects_client,
+            cls.os_admin.users_client, cls.os_admin.roles_client,
+            cls.os_admin.domains_client, project_domain_name)
+
+        # User info
+        project = project or cls.admin_project
+        username = data_utils.rand_name('manila_%s' % project['id'])
+        password = data_utils.rand_password()
+        email = '%s@example.org' % username
+
+        user = cls.os_admin.creds_client.create_user(
+            username, password, project, email)
+        cls.class_project_users_created.append(user)
+
+        for conf_role in CONF.auth.tempest_roles:
+            cls.os_admin.creds_client.assign_user_role(
+                user, project, conf_role)
+
+        user_creds = cls.os_admin.creds_client.get_credentials(
+            user, project, password)
+        os = clients.Clients(user_creds)
+        os.shares_v1_client = os.share_v1.SharesClient()
+        os.shares_v2_client = os.share_v2.SharesV2Client()
+        return os
+
+    @classmethod
     def _create_share_type(cls, specs=None):
         name = data_utils.rand_name("unique_st_name")
         extra_specs = cls.add_extra_specs_to_dict(specs)
