diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
index e13451c8c..46f7dda13 100644
--- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
@@ -1,137 +1,167 @@
 <?php
 
 final class PhabricatorDashboardEditController
   extends PhabricatorDashboardController {
 
   private $id;
 
   public function willProcessRequest(array $data) {
     $this->id = idx($data, 'id');
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $viewer = $request->getUser();
 
     if ($this->id) {
       $dashboard = id(new PhabricatorDashboardQuery())
         ->setViewer($viewer)
         ->withIDs(array($this->id))
         ->needPanels(true)
         ->requireCapabilities(
           array(
             PhabricatorPolicyCapability::CAN_VIEW,
             PhabricatorPolicyCapability::CAN_EDIT,
           ))
         ->executeOne();
       if (!$dashboard) {
         return new Aphront404Response();
       }
 
       $is_new = false;
     } else {
       $dashboard = PhabricatorDashboard::initializeNewDashboard($viewer);
 
       $is_new = true;
     }
 
     $crumbs = $this->buildApplicationCrumbs();
 
     if ($is_new) {
       $title = pht('Create Dashboard');
       $header = pht('Create Dashboard');
       $button = pht('Create Dashboard');
       $cancel_uri = $this->getApplicationURI();
 
       $crumbs->addTextCrumb('Create Dashboard');
     } else {
       $id = $dashboard->getID();
       $cancel_uri = $this->getApplicationURI('view/'.$id.'/');
 
       $title = pht('Edit Dashboard %d', $dashboard->getID());
       $header = pht('Edit Dashboard "%s"', $dashboard->getName());
       $button = pht('Save Changes');
 
       $crumbs->addTextCrumb(pht('Dashboard %d', $id), $cancel_uri);
       $crumbs->addTextCrumb(pht('Edit'));
     }
 
     $v_name = $dashboard->getName();
     $v_layout_mode = $dashboard->getLayoutConfigObject()->getLayoutMode();
     $e_name = true;
 
     $validation_exception = null;
     if ($request->isFormPost()) {
       $v_name = $request->getStr('name');
       $v_layout_mode = $request->getStr('layout_mode');
+      $v_view_policy = $request->getStr('viewPolicy');
+      $v_edit_policy = $request->getStr('editPolicy');
 
       $xactions = array();
 
       $type_name = PhabricatorDashboardTransaction::TYPE_NAME;
       $type_layout_mode = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
+      $type_view_policy = PhabricatorTransactions::TYPE_VIEW_POLICY;
+      $type_edit_policy = PhabricatorTransactions::TYPE_EDIT_POLICY;
 
       $xactions[] = id(new PhabricatorDashboardTransaction())
         ->setTransactionType($type_name)
         ->setNewValue($v_name);
       $xactions[] = id(new PhabricatorDashboardTransaction())
         ->setTransactionType($type_layout_mode)
         ->setNewValue($v_layout_mode);
+      $xactions[] = id(new PhabricatorDashboardTransaction())
+        ->setTransactionType($type_view_policy)
+        ->setNewValue($v_view_policy);
+      $xactions[] = id(new PhabricatorDashboardTransaction())
+        ->setTransactionType($type_edit_policy)
+        ->setNewValue($v_edit_policy);
 
       try {
         $editor = id(new PhabricatorDashboardTransactionEditor())
           ->setActor($viewer)
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request)
           ->applyTransactions($dashboard, $xactions);
 
         if ($is_new) {
           $uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/');
         } else {
           $uri = $this->getApplicationURI('view/'.$dashboard->getID().'/');
         }
         return id(new AphrontRedirectResponse())->setURI($uri);
       } catch (PhabricatorApplicationTransactionValidationException $ex) {
         $validation_exception = $ex;
 
         $e_name = $validation_exception->getShortMessage($type_name);
+
+        $dashboard->setViewPolicy($v_view_policy);
+        $dashboard->setEditPolicy($v_edit_policy);
       }
     }
 
+    $policies = id(new PhabricatorPolicyQuery())
+      ->setViewer($viewer)
+      ->setObject($dashboard)
+      ->execute();
+
     $layout_mode_options =
       PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions();
     $form = id(new AphrontFormView())
       ->setUser($viewer)
       ->appendChild(
         id(new AphrontFormTextControl())
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setValue($v_name)
           ->setError($e_name))
+      ->appendChild(
+        id(new AphrontFormPolicyControl())
+          ->setName('viewPolicy')
+          ->setPolicyObject($dashboard)
+          ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)
+          ->setPolicies($policies))
+      ->appendChild(
+        id(new AphrontFormPolicyControl())
+          ->setName('editPolicy')
+          ->setPolicyObject($dashboard)
+          ->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
+          ->setPolicies($policies))
       ->appendChild(
         id(new AphrontFormSelectControl())
           ->setLabel(pht('Layout Mode'))
           ->setName('layout_mode')
           ->setValue($v_layout_mode)
           ->setOptions($layout_mode_options))
       ->appendChild(
         id(new AphrontFormSubmitControl())
           ->setValue($button)
           ->addCancelButton($cancel_uri));
 
     $box = id(new PHUIObjectBoxView())
       ->setHeaderText($header)
       ->setForm($form)
       ->setValidationException($validation_exception);
 
     return $this->buildApplicationPage(
       array(
         $crumbs,
         $box,
       ),
       array(
         'title' => $title,
         'device' => true,
       ));
   }
 
 }
diff --git a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
index 1d099262d..df05e566a 100644
--- a/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
+++ b/src/applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php
@@ -1,130 +1,132 @@
 <?php
 
 final class PhabricatorDashboardTransactionEditor
   extends PhabricatorApplicationTransactionEditor {
 
   public function getTransactionTypes() {
     $types = parent::getTransactionTypes();
 
     $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
     $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
     $types[] = PhabricatorTransactions::TYPE_EDGE;
 
     $types[] = PhabricatorDashboardTransaction::TYPE_NAME;
     $types[] = PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE;
 
     return $types;
   }
 
   protected function getCustomTransactionOldValue(
     PhabricatorLiskDAO $object,
     PhabricatorApplicationTransaction $xaction) {
     switch ($xaction->getTransactionType()) {
       case PhabricatorDashboardTransaction::TYPE_NAME:
         if ($this->getIsNewObject()) {
           return null;
         }
         return $object->getName();
       case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
         if ($this->getIsNewObject()) {
           return null;
         }
         $layout_config = $object->getLayoutConfigObject();
         return $layout_config->getLayoutMode();
     }
 
     return parent::getCustomTransactionOldValue($object, $xaction);
   }
 
   protected function getCustomTransactionNewValue(
     PhabricatorLiskDAO $object,
     PhabricatorApplicationTransaction $xaction) {
     switch ($xaction->getTransactionType()) {
       case PhabricatorDashboardTransaction::TYPE_NAME:
       case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
         return $xaction->getNewValue();
     }
     return parent::getCustomTransactionNewValue($object, $xaction);
   }
 
   protected function applyCustomInternalTransaction(
     PhabricatorLiskDAO $object,
     PhabricatorApplicationTransaction $xaction) {
     switch ($xaction->getTransactionType()) {
       case PhabricatorDashboardTransaction::TYPE_NAME:
         $object->setName($xaction->getNewValue());
         return;
       case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
         $old_layout = $object->getLayoutConfigObject();
         $new_layout = clone $old_layout;
         $new_layout->setLayoutMode($xaction->getNewValue());
         if ($old_layout->isMultiColumnLayout() !=
             $new_layout->isMultiColumnLayout()) {
           $panel_phids = $object->getPanelPHIDs();
           $new_locations = $new_layout->getDefaultPanelLocations();
           foreach ($panel_phids as $panel_phid) {
             $new_locations[0][] = $panel_phid;
           }
           $new_layout->setPanelLocations($new_locations);
         }
         $object->setLayoutConfigFromObject($new_layout);
         return;
       case PhabricatorTransactions::TYPE_VIEW_POLICY:
         $object->setViewPolicy($xaction->getNewValue());
         return;
       case PhabricatorTransactions::TYPE_EDIT_POLICY:
         $object->setEditPolicy($xaction->getNewValue());
         return;
       case PhabricatorTransactions::TYPE_EDGE:
         return;
     }
 
     return parent::applyCustomInternalTransaction($object, $xaction);
   }
 
   protected function applyCustomExternalTransaction(
     PhabricatorLiskDAO $object,
     PhabricatorApplicationTransaction $xaction) {
 
     switch ($xaction->getTransactionType()) {
       case PhabricatorDashboardTransaction::TYPE_NAME:
       case PhabricatorDashboardTransaction::TYPE_LAYOUT_MODE:
+      case PhabricatorTransactions::TYPE_VIEW_POLICY:
+      case PhabricatorTransactions::TYPE_EDIT_POLICY:
         return;
       case PhabricatorTransactions::TYPE_EDGE:
         return;
     }
 
     return parent::applyCustomExternalTransaction($object, $xaction);
   }
 
   protected function validateTransaction(
     PhabricatorLiskDAO $object,
     $type,
     array $xactions) {
 
     $errors = parent::validateTransaction($object, $type, $xactions);
 
     switch ($type) {
       case PhabricatorDashboardTransaction::TYPE_NAME:
         $missing = $this->validateIsEmptyTextField(
           $object->getName(),
           $xactions);
 
         if ($missing) {
           $error = new PhabricatorApplicationTransactionValidationError(
             $type,
             pht('Required'),
             pht('Dashboard name is required.'),
             nonempty(last($xactions), null));
 
           $error->setIsMissingFieldError(true);
           $errors[] = $error;
         }
         break;
     }
 
     return $errors;
   }
 
 
 }