diff --git a/zun_ui/content/container/containers/panel.py b/zun_ui/content/container/containers/panel.py
index 5a8d9df..be9782d 100644
--- a/zun_ui/content/container/containers/panel.py
+++ b/zun_ui/content/container/containers/panel.py
@@ -21,3 +21,8 @@ from zun_ui.api import rest_api  # noqa: F401
 class Containers(horizon.Panel):
     name = _("Containers")
     slug = "container.containers"
+
+
+class ContainersForAdmin(horizon.Panel):
+    name = _("Containers")
+    slug = "container.containers"
diff --git a/zun_ui/enabled/_2333_admin_container_containers_panel.py b/zun_ui/enabled/_2333_admin_container_containers_panel.py
new file mode 100644
index 0000000..269cf8d
--- /dev/null
+++ b/zun_ui/enabled/_2333_admin_container_containers_panel.py
@@ -0,0 +1,21 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# The slug of the panel to be added to HORIZON_CONFIG. Required.
+PANEL = 'container.containers'
+# The slug of the panel group the PANEL is associated with.
+PANEL_GROUP = 'container'
+# The slug of the dashboard the PANEL associated with. Required.
+PANEL_DASHBOARD = 'admin'
+
+# Python panel class of the PANEL to be added.
+ADD_PANEL = 'zun_ui.content.container.containers.panel.ContainersForAdmin'
diff --git a/zun_ui/static/dashboard/container/containers/actions/create.service.js b/zun_ui/static/dashboard/container/containers/actions/create.service.js
index c152a3f..104d6f7 100644
--- a/zun_ui/static/dashboard/container/containers/actions/create.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/create.service.js
@@ -25,8 +25,10 @@
     .factory('horizon.dashboard.container.containers.create.service', createService);
 
   createService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.policy',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.workflow',
     'horizon.framework.util.actions.action-result.service',
@@ -37,7 +39,7 @@
   ];
 
   function createService(
-    policy, zun, resourceType, workflow,
+    $q, policy, zun, adminActions, resourceType, workflow,
     actionResult, gettext, $qExtensions, modal, toast
   ) {
     var message = {
@@ -66,7 +68,14 @@
     }
 
     function allowed() {
-      return policy.ifAllowed({ rules: [['container', 'add_container']] });
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("create") >= 0;
+      }
+      return $q.all([
+        policy.ifAllowed({ rules: [['container', 'add_container']] }),
+        $qExtensions.booleanAsPromise(adminAction)
+      ]);
     }
 
     function submit(context) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/delete-force.service.js b/zun_ui/static/dashboard/container/containers/actions/delete-force.service.js
index c792e93..3139ad4 100644
--- a/zun_ui/static/dashboard/container/containers/actions/delete-force.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/delete-force.service.js
@@ -37,6 +37,7 @@
     'horizon.framework.util.q.extensions',
     'horizon.framework.widgets.modal.deleteModalService',
     'horizon.framework.widgets.toast.service',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.events',
     'horizon.dashboard.container.containers.validStates'
@@ -44,7 +45,7 @@
 
   function deleteForceService(
     $location, $q, zun, policy, actionResult, gettext, $qExtensions, deleteModal,
-    toast, resourceType, events, validStates
+    toast, adminActions, resourceType, events, validStates
   ) {
     var scope;
     var context = {
@@ -67,9 +68,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.delete_force.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("delete_force") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.delete_force.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     // delete selected resource objects
diff --git a/zun_ui/static/dashboard/container/containers/actions/delete-stop.service.js b/zun_ui/static/dashboard/container/containers/actions/delete-stop.service.js
index f88f694..c2abeae 100644
--- a/zun_ui/static/dashboard/container/containers/actions/delete-stop.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/delete-stop.service.js
@@ -37,6 +37,7 @@
     'horizon.framework.util.q.extensions',
     'horizon.framework.widgets.modal.deleteModalService',
     'horizon.framework.widgets.toast.service',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.events',
     'horizon.dashboard.container.containers.validStates'
@@ -44,7 +45,7 @@
 
   function deleteStopService(
     $location, $q, zun, policy, actionResult, gettext, $qExtensions, deleteModal,
-    toast, resourceType, events, validStates
+    toast, adminActions, resourceType, events, validStates
   ) {
     var scope;
     var context = {
@@ -67,9 +68,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.delete_stop.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("delete_stop") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.delete_stop.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     // delete selected resource objects
diff --git a/zun_ui/static/dashboard/container/containers/actions/delete.service.js b/zun_ui/static/dashboard/container/containers/actions/delete.service.js
index ff67a05..19549af 100644
--- a/zun_ui/static/dashboard/container/containers/actions/delete.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/delete.service.js
@@ -39,6 +39,7 @@
     'horizon.framework.widgets.modal.deleteModalService',
     'horizon.framework.widgets.table.events',
     'horizon.framework.widgets.toast.service',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.events',
     'horizon.dashboard.container.containers.validStates'
@@ -46,7 +47,7 @@
 
   function deleteService(
     $location, $q, $rootScope, zun, policy, actionResult, gettext, $qExtensions, deleteModal,
-    tableEvents, toast, resourceType, events, validStates
+    tableEvents, toast, adminActions, resourceType, events, validStates
   ) {
     var scope;
     var context = {
@@ -69,15 +70,24 @@
     }
 
     function allowed(container) {
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("delete") >= 0;
+      }
       // only row actions pass in container
       // otherwise, assume it is a batch action
+      var state;
       if (container) {
-        return $qExtensions.booleanAsPromise(
+        state = $qExtensions.booleanAsPromise(
           validStates.delete.indexOf(container.status) >= 0
         );
       } else {
-        return $qExtensions.booleanAsPromise(true);
+        state = $qExtensions.booleanAsPromise(true);
       }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        state
+      ]);
     }
 
     // delete selected resource objects
diff --git a/zun_ui/static/dashboard/container/containers/actions/execute.service.js b/zun_ui/static/dashboard/container/containers/actions/execute.service.js
index 12f1d15..9403542 100644
--- a/zun_ui/static/dashboard/container/containers/actions/execute.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/execute.service.js
@@ -28,7 +28,9 @@
       executeContainerService);
 
   executeContainerService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.framework.util.actions.action-result.service',
@@ -40,7 +42,8 @@
   ];
 
   function executeContainerService(
-    zun, resourceType, validStates, actionResult, gettext, $qExtensions, modal, waitSpinner, toast
+    $q, zun, adminActions, resourceType, validStates, actionResult,
+    gettext, $qExtensions, modal, waitSpinner, toast
   ) {
     // schema
     var schema = {
@@ -123,9 +126,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.execute.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("execute") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.execute.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/kill.service.js b/zun_ui/static/dashboard/container/containers/actions/kill.service.js
index 956728c..1f7caf2 100644
--- a/zun_ui/static/dashboard/container/containers/actions/kill.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/kill.service.js
@@ -28,7 +28,9 @@
       killContainerService);
 
   killContainerService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.basePath',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
@@ -40,7 +42,8 @@
   ];
 
   function killContainerService(
-    zun, basePath, resourceType, validStates, actionResult, gettext, $qExtensions, modal, toast
+    $q, zun, adminActions, basePath, resourceType, validStates,
+    actionResult, gettext, $qExtensions, modal, toast
   ) {
     // schema
     var schema = {
@@ -98,9 +101,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.kill.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("kill") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.kill.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/manage-security-groups/manage-security-groups.service.js b/zun_ui/static/dashboard/container/containers/actions/manage-security-groups/manage-security-groups.service.js
index a5694d5..283f23f 100644
--- a/zun_ui/static/dashboard/container/containers/actions/manage-security-groups/manage-security-groups.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/manage-security-groups/manage-security-groups.service.js
@@ -21,10 +21,12 @@
       manageSecurityGroup);
 
   manageSecurityGroup.$inject = [
+    "$q",
     "horizon.app.core.openstack-service-api.neutron",
     "horizon.app.core.openstack-service-api.security-group",
     "horizon.app.core.openstack-service-api.zun",
     "horizon.dashboard.container.basePath",
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.framework.util.actions.action-result.service',
@@ -35,8 +37,8 @@
   ];
 
   function manageSecurityGroup(
-    neutron, securityGroup, zun, basePath, resourceType, validStates, actionResult,
-    gettext, $qExtensions, modal, toast
+    $q, neutron, securityGroup, zun, basePath, adminActions, resourceType, validStates,
+    actionResult, gettext, $qExtensions, modal, toast
   ) {
     // title for dialog
     var title = gettext("Manage Security Groups: container %s");
@@ -93,9 +95,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.manage_security_groups.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("manage_security_groups") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.manage_security_groups.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/pause.service.js b/zun_ui/static/dashboard/container/containers/actions/pause.service.js
index ece068a..abbdbcf 100644
--- a/zun_ui/static/dashboard/container/containers/actions/pause.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/pause.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.pause.service', pauseService);
 
   pauseService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.framework.util.actions.action-result.service',
@@ -35,7 +37,7 @@
   ];
 
   function pauseService(
-    zun, resourceType, validStates, actionResult, $qExtensions, toast
+    $q, zun, adminActions, resourceType, validStates, actionResult, $qExtensions, toast
   ) {
 
     var message = {
@@ -58,9 +60,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.pause.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("pause") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.pause.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/rebuild.service.js b/zun_ui/static/dashboard/container/containers/actions/rebuild.service.js
index 062dfaa..f39c451 100644
--- a/zun_ui/static/dashboard/container/containers/actions/rebuild.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/rebuild.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.rebuild.service', rebuildService);
 
   rebuildService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.basePath',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
@@ -38,7 +40,8 @@
   ];
 
   function rebuildService(
-    zun, basePath, resourceType, validStates, actionResult, gettext, $qExtensions, modal, toast
+    $q, zun, adminActions, basePath, resourceType, validStates,
+    actionResult, gettext, $qExtensions, modal, toast
   ) {
     var imageDrivers = [
       {value: "", name: gettext("Select image driver for changing image.")},
@@ -115,9 +118,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.rebuild.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("rebuild") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.rebuild.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/restart.service.js b/zun_ui/static/dashboard/container/containers/actions/restart.service.js
index 2a13afc..8390b8f 100644
--- a/zun_ui/static/dashboard/container/containers/actions/restart.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/restart.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.restart.service', restartService);
 
   restartService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.basePath',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
@@ -38,7 +40,8 @@
   ];
 
   function restartService(
-    zun, basePath, resourceType, validStates, actionResult, gettext, $qExtensions, modal, toast
+    $q, zun, adminActions, basePath, resourceType, validStates,
+    actionResult, gettext, $qExtensions, modal, toast
   ) {
     // schema
     var schema = {
@@ -95,9 +98,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.restart.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("restart") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.restart.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/start.service.js b/zun_ui/static/dashboard/container/containers/actions/start.service.js
index 1f37379..4e995e9 100644
--- a/zun_ui/static/dashboard/container/containers/actions/start.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/start.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.start.service', startService);
 
   startService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.framework.util.actions.action-result.service',
@@ -35,7 +37,7 @@
   ];
 
   function startService(
-    zun, resourceType, validStates, actionResult, $qExtensions, toast
+    $q, zun, adminActions, resourceType, validStates, actionResult, $qExtensions, toast
   ) {
 
     var message = {
@@ -58,9 +60,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.start.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("start") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.start.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/stop.service.js b/zun_ui/static/dashboard/container/containers/actions/stop.service.js
index 86cbcd0..8300c62 100644
--- a/zun_ui/static/dashboard/container/containers/actions/stop.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/stop.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.stop.service', stopService);
 
   stopService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.basePath',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
@@ -38,7 +40,8 @@
   ];
 
   function stopService(
-    zun, basePath, resourceType, validStates, actionResult, gettext, $qExtensions, modal, toast
+    $q, zun, adminActions, basePath, resourceType, validStates,
+    actionResult, gettext, $qExtensions, modal, toast
   ) {
     // schema
     var schema = {
@@ -95,9 +98,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.stop.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("stop") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.stop.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/unpause.service.js b/zun_ui/static/dashboard/container/containers/actions/unpause.service.js
index 3c2226d..6ae8ba3 100644
--- a/zun_ui/static/dashboard/container/containers/actions/unpause.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/unpause.service.js
@@ -26,7 +26,9 @@
     .factory('horizon.dashboard.container.containers.unpause.service', unpauseService);
 
   unpauseService.$inject = [
+    '$q',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.framework.util.actions.action-result.service',
@@ -35,7 +37,7 @@
   ];
 
   function unpauseService(
-    zun, resourceType, validStates, actionResult, $qExtensions, toast
+    $q, zun, adminActions, resourceType, validStates, actionResult, $qExtensions, toast
   ) {
 
     var message = {
@@ -58,9 +60,16 @@
     }
 
     function allowed(container) {
-      return $qExtensions.booleanAsPromise(
-        validStates.unpause.indexOf(container.status) >= 0
-      );
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("unpause") >= 0;
+      }
+      return $q.all([
+        $qExtensions.booleanAsPromise(adminAction),
+        $qExtensions.booleanAsPromise(
+          validStates.unpause.indexOf(container.status) >= 0
+        )
+      ]);
     }
 
     function perform(selected) {
diff --git a/zun_ui/static/dashboard/container/containers/actions/update.service.js b/zun_ui/static/dashboard/container/containers/actions/update.service.js
index 67b4fe2..17be308 100644
--- a/zun_ui/static/dashboard/container/containers/actions/update.service.js
+++ b/zun_ui/static/dashboard/container/containers/actions/update.service.js
@@ -28,6 +28,7 @@
     '$q',
     'horizon.app.core.openstack-service-api.policy',
     'horizon.app.core.openstack-service-api.zun',
+    'horizon.dashboard.container.containers.adminActions',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.validStates',
     'horizon.dashboard.container.containers.workflow',
@@ -39,7 +40,7 @@
   ];
 
   function updateService(
-    $q, policy, zun, resourceType, validStates, workflow,
+    $q, policy, zun, adminActions, resourceType, validStates, workflow,
     actionResult, gettext, $qExtensions, modal, toast
   ) {
     var message = {
@@ -70,8 +71,13 @@
     }
 
     function allowed(container) {
+      var adminAction = true;
+      if (zun.isAdmin()) {
+        adminAction = adminActions.indexOf("update") >= 0;
+      }
       return $q.all([
         policy.ifAllowed({ rules: [['container', 'edit_container']] }),
+        $qExtensions.booleanAsPromise(adminAction),
         $qExtensions.booleanAsPromise(
           validStates.update.indexOf(container.status) >= 0
         )
diff --git a/zun_ui/static/dashboard/container/containers/containers.module.js b/zun_ui/static/dashboard/container/containers/containers.module.js
index 4004b00..668ec94 100644
--- a/zun_ui/static/dashboard/container/containers/containers.module.js
+++ b/zun_ui/static/dashboard/container/containers/containers.module.js
@@ -31,6 +31,7 @@
     ])
     .constant('horizon.dashboard.container.containers.events', events())
     .constant('horizon.dashboard.container.containers.validStates', validStates())
+    .constant('horizon.dashboard.container.containers.adminActions', adminActions())
     .constant('horizon.dashboard.container.containers.resourceType', 'OS::Zun::Container')
     .run(run)
     .config(config);
@@ -66,6 +67,10 @@
       execute: [states.RUNNING],
       kill: [states.RUNNING],
       delete: [states.CREATED, states.ERROR, states.STOPPED, states.DELETED, states.DEAD],
+      /* NOTE(shu-mutow): Docker does not allow us to delete PAUSED container.
+       *                  There are ways to delete paused container in server,
+       *                  but we are according to Docker's policy as now.
+       */
       delete_force: [
         states.CREATED, states.CREATING, states.ERROR, states.RUNNING,
         states.STOPPED, states.UNKNOWN, states.DELETED, states.DEAD,
@@ -79,6 +84,10 @@
     };
   }
 
+  function adminActions() {
+    return ["update", "start", "stop", "restart", "rebuild", "kill", "delete_force"];
+  }
+
   run.$inject = [
     'horizon.framework.conf.resource-type-registry.service',
     'horizon.app.core.openstack-service-api.zun',
@@ -91,7 +100,7 @@
     registry.getResourceType(resourceType)
     .setNames(gettext('Container'), gettext('Containers'))
     .setSummaryTemplateUrl(basePath + 'details/drawer.html')
-    .setDefaultIndexUrl('/project/container/containers/')
+    .setDefaultIndexUrl(containerService.getDefaultIndexUrl())
     .setProperties(containerProperties())
     .setListFunction(containerService.getContainersPromise)
     .tableColumns
@@ -196,8 +205,12 @@
   function config($provide, $windowProvider, $routeProvider) {
     var path = $windowProvider.$get().STATIC_URL + 'dashboard/container/containers/';
     $provide.constant('horizon.dashboard.container.containers.basePath', path);
-    $routeProvider.when('/project/container/containers', {
-      templateUrl: path + 'panel.html'
-    });
+    $routeProvider
+      .when('/project/container/containers', {
+        templateUrl: path + 'panel.html'
+      })
+      .when('/admin/container/containers', {
+        templateUrl: path + 'panel.html'
+      });
   }
 })();
diff --git a/zun_ui/static/dashboard/container/containers/containers.service.js b/zun_ui/static/dashboard/container/containers/containers.service.js
index 020291e..8d81126 100644
--- a/zun_ui/static/dashboard/container/containers/containers.service.js
+++ b/zun_ui/static/dashboard/container/containers/containers.service.js
@@ -19,8 +19,10 @@
     .factory('horizon.dashboard.container.containers.service', containersService);
 
   containersService.$inject = [
+    '$location',
     'horizon.app.core.detailRoute',
-    'horizon.app.core.openstack-service-api.zun'
+    'horizon.app.core.openstack-service-api.zun',
+    'horizon.framework.util.navigations.service'
   ];
 
   /*
@@ -31,13 +33,30 @@
    * This service provides functions that are used through
    * the containers features.
    */
-  function containersService(detailRoute, zun) {
+  function containersService($location, detailRoute, zun, navigation) {
     return {
+      getDefaultIndexUrl: getDefaultIndexUrl,
       getDetailsPath: getDetailsPath,
       getContainerPromise: getContainerPromise,
       getContainersPromise: getContainersPromise
     };
 
+    function getDefaultIndexUrl() {
+      var dashboard, breadcrumbDashboard;
+      var path = "/container/containers";
+      if (zun.isAdmin()) {
+        dashboard = "/admin";
+        breadcrumbDashboard = gettext("Admin");
+      } else {
+        dashboard = "/project";
+        breadcrumbDashboard = gettext("Project");
+      }
+      var url = dashboard + path + "/";
+      navigation.setBreadcrumb([
+        breadcrumbDashboard, gettext("Container"), gettext("Containers")]);
+      navigation.expandNavigationByUrl(url);
+      return url;
+    }
     /*
      * @ngdoc function
      * @name getDetailsPath
@@ -46,7 +65,11 @@
      * Returns the relative path to the details view.
      */
     function getDetailsPath(item) {
-      return detailRoute + 'OS::Zun::Container/' + item.id;
+      var detailsPath = detailRoute + 'OS::Zun::Container/' + item.id;
+      if ($location.url() === '/admin/container/containers') {
+        detailsPath = detailsPath + "?nav=/admin/container/containers/";
+      }
+      return detailsPath;
     }
 
     /*
diff --git a/zun_ui/static/dashboard/container/containers/details/details.module.js b/zun_ui/static/dashboard/container/containers/details/details.module.js
index 3d0bc2d..8c5d21a 100644
--- a/zun_ui/static/dashboard/container/containers/details/details.module.js
+++ b/zun_ui/static/dashboard/container/containers/details/details.module.js
@@ -27,6 +27,7 @@
   .run(registerDetails);
 
   registerDetails.$inject = [
+    'horizon.app.core.openstack-service-api.zun',
     'horizon.dashboard.container.containers.basePath',
     'horizon.dashboard.container.containers.resourceType',
     'horizon.dashboard.container.containers.service',
@@ -34,6 +35,7 @@
   ];
 
   function registerDetails(
+    zun,
     basePath,
     resourceType,
     containerService,
@@ -46,17 +48,21 @@
         id: 'containerDetailsOverview',
         name: gettext('Overview'),
         template: basePath + 'details/overview.html'
-      })
-      .append({
-        id: 'containerDetailsLogs',
-        name: gettext('Logs'),
-        template: basePath + 'details/logs.html'
-      })
-      .append({
-        id: 'containerDetailsConsole',
-        name: gettext('Console'),
-        template: basePath + 'details/console.html'
       });
+    if (!zun.isAdmin()) {
+      registry.getResourceType(resourceType)
+        .detailsViews
+        .append({
+          id: 'containerDetailsLogs',
+          name: gettext('Logs'),
+          template: basePath + 'details/logs.html'
+        })
+        .append({
+          id: 'containerDetailsConsole',
+          name: gettext('Console'),
+          template: basePath + 'details/console.html'
+        });
+    }
   }
 
 })();
diff --git a/zun_ui/static/dashboard/container/zun.service.js b/zun_ui/static/dashboard/container/zun.service.js
index 33c8dc8..624da50 100644
--- a/zun_ui/static/dashboard/container/zun.service.js
+++ b/zun_ui/static/dashboard/container/zun.service.js
@@ -19,12 +19,13 @@
     .factory('horizon.app.core.openstack-service-api.zun', ZunAPI);
 
   ZunAPI.$inject = [
+    '$location',
     'horizon.framework.util.http.service',
     'horizon.framework.widgets.toast.service',
     'horizon.framework.util.i18n.gettext'
   ];
 
-  function ZunAPI(apiService, toastService, gettext) {
+  function ZunAPI($location, apiService, toastService, gettext) {
     var containersPath = '/api/zun/containers/';
     var zunAvailabilityZonesPath = '/api/zun/availability_zones/';
     var capsulesPath = '/api/zun/capsules/';
@@ -61,7 +62,8 @@
       getImages: getImages,
       deleteImage: deleteImage,
       getHosts: getHosts,
-      getHost: getHost
+      getHost: getHost,
+      isAdmin: isAdmin
     };
     return service;
 
@@ -270,5 +272,15 @@
         toastService.add('error', message);
       };
     }
+
+    function isAdmin() {
+      var isAdmin = false;
+      if ($location.url().startsWith("/admin") ||
+        $location.url().endsWith("?nav=%2Fadmin%2Fcontainer%2Fcontainers%2F")
+      ) {
+        isAdmin = true;
+      }
+      return isAdmin;
+    }
   }
 }());