1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-03 19:31:02 +01:00

Show an "approval queue" item on the home page for admins, and sort out menu item visibility

Summary:
  - If you're an administrator and there are users waiting for approval, show a count on the home page.
  - Sort out the `isUserActivated()` access check.
  - Hide all the menu widgets except "Logout" for disabled and unapproved users.
  - Add a "Log In" item.
  - Add a bunch of unit tests.

Test Plan: Ran unit tests, clicked around as unapproved/approved/logged-in/logged-out users.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran, chad

Differential Revision: https://secure.phabricator.com/D7574
This commit is contained in:
epriestley 2013-11-13 11:24:38 -08:00
parent c8320923c4
commit 0fa411083f
7 changed files with 76 additions and 14 deletions

View file

@ -41,6 +41,20 @@ final class PhabricatorApplicationAuth extends PhabricatorApplication {
->setHref('/logout/') ->setHref('/logout/')
->setSelected(($controller instanceof PhabricatorLogoutController)); ->setSelected(($controller instanceof PhabricatorLogoutController));
$items[] = $item; $items[] = $item;
} else {
if ($controller instanceof PhabricatorAuthController) {
// Don't show the "Login" item on auth controllers, since they're
// generally all related to logging in anyway.
} else {
$item = id(new PHUIListItemView())
->addClass('core-menu-item')
->setName(pht('Log In'))
// TODO: Login icon?
->setIcon('power')
->setWorkflow(true)
->setHref('/auth/login/');
$items[] = $item;
}
} }
return $items; return $items;

View file

@ -74,10 +74,15 @@ abstract class PhabricatorController extends AphrontController {
} }
} }
if ($user->getIsDisabled() && $this->shouldRequireEnabledUser()) { if ($this->shouldRequireEnabledUser()) {
$disabled_user_controller = new PhabricatorDisabledUserController( if ($user->isLoggedIn() && !$user->getIsApproved()) {
$request); $controller = new PhabricatorAuthNeedsApprovalController($request);
return $this->delegateToController($disabled_user_controller); return $this->delegateToController($controller);
}
if ($user->getIsDisabled()) {
$controller = new PhabricatorDisabledUserController($request);
return $this->delegateToController($controller);
}
} }
$event = new PhabricatorEvent( $event = new PhabricatorEvent(
@ -120,11 +125,6 @@ abstract class PhabricatorController extends AphrontController {
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
} }
if (!$user->getIsApproved()) {
$controller = new PhabricatorAuthNeedsApprovalController($request);
$this->setCurrentApplication($auth_application);
return $this->delegateToController($controller);
}
} }
// If the user doesn't have access to the application, don't let them use // If the user doesn't have access to the application, don't let them use

View file

@ -47,6 +47,11 @@ final class PhabricatorAccessControlTestCase
->setUsername('admin') ->setUsername('admin')
->save(); ->save();
$u_notapproved = $this->generateNewTestUser()
->setIsApproved(0)
->setUsername('notapproved')
->save();
$env = PhabricatorEnv::beginScopedEnv(); $env = PhabricatorEnv::beginScopedEnv();
$env->overrideEnvConfig('phabricator.base-uri', 'http://'.$host); $env->overrideEnvConfig('phabricator.base-uri', 'http://'.$host);
$env->overrideEnvConfig('policy.allow-public', false); $env->overrideEnvConfig('policy.allow-public', false);
@ -68,6 +73,7 @@ final class PhabricatorAccessControlTestCase
array( array(
$u_public, $u_public,
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
@ -86,6 +92,7 @@ final class PhabricatorAccessControlTestCase
$u_unverified, $u_unverified,
$u_public, $u_public,
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
$this->checkAccess( $this->checkAccess(
@ -100,6 +107,7 @@ final class PhabricatorAccessControlTestCase
array( array(
$u_public, $u_public,
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
$env->overrideEnvConfig('auth.require-email-verification', false); $env->overrideEnvConfig('auth.require-email-verification', false);
@ -118,6 +126,7 @@ final class PhabricatorAccessControlTestCase
$u_unverified, $u_unverified,
$u_public, $u_public,
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
@ -132,6 +141,7 @@ final class PhabricatorAccessControlTestCase
$u_unverified, $u_unverified,
$u_admin, $u_admin,
$u_disabled, $u_disabled,
$u_notapproved,
), ),
array( array(
$u_public, $u_public,
@ -152,6 +162,7 @@ final class PhabricatorAccessControlTestCase
), ),
array( array(
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
@ -184,6 +195,7 @@ final class PhabricatorAccessControlTestCase
), ),
array( array(
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
$env->overrideEnvConfig('policy.allow-public', false); $env->overrideEnvConfig('policy.allow-public', false);
@ -208,6 +220,7 @@ final class PhabricatorAccessControlTestCase
$u_admin, $u_admin,
$u_public, $u_public,
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
$this->checkAccess( $this->checkAccess(
@ -222,6 +235,7 @@ final class PhabricatorAccessControlTestCase
), ),
array( array(
$u_disabled, $u_disabled,
$u_notapproved,
)); ));
} }

View file

@ -62,13 +62,39 @@ final class PhabricatorApplicationPeople extends PhabricatorApplication {
); );
} }
public function loadStatus(PhabricatorUser $user) {
if (!$user->getIsAdmin()) {
return array();
}
$need_approval = id(new PhabricatorPeopleQuery())
->setViewer($user)
->withIsApproved(false)
->execute();
if (!$need_approval) {
return array();
}
$status = array();
$count = count($need_approval);
$type = PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d User(s) Need Approval', $count))
->setCount($count);
return $status;
}
public function buildMainMenuItems( public function buildMainMenuItems(
PhabricatorUser $user, PhabricatorUser $user,
PhabricatorController $controller = null) { PhabricatorController $controller = null) {
$items = array(); $items = array();
if ($user->isLoggedIn()) { if ($user->isLoggedIn() && $user->isUserActivated()) {
$image = $user->loadProfileImageURI(); $image = $user->loadProfileImageURI();
$item = new PHUIListItemView(); $item = new PHUIListItemView();

View file

@ -37,7 +37,7 @@ final class PhabricatorApplicationSettings extends PhabricatorApplication {
$items = array(); $items = array();
if ($user->isLoggedIn()) { if ($user->isLoggedIn() && $user->isUserActivated()) {
$selected = ($controller instanceof PhabricatorSettingsMainController); $selected = ($controller instanceof PhabricatorSettingsMainController);
$item = new PHUIListItemView(); $item = new PHUIListItemView();
$item->setName(pht('Settings')); $item->setName(pht('Settings'));

View file

@ -810,6 +810,11 @@ abstract class PhabricatorBaseEnglishTranslation
), ),
), ),
'%d User(s) Need Approval' => array(
'%d User Needs Approval',
'%d Users Need Approval',
),
); );
} }

View file

@ -44,7 +44,7 @@ final class PhabricatorMainMenuView extends AphrontView {
$search_button = ''; $search_button = '';
$app_button = ''; $app_button = '';
if ($user->isLoggedIn()) { if ($user->isLoggedIn() && $user->isUserActivated()) {
list($menu, $dropdowns) = $this->renderNotificationMenu(); list($menu, $dropdowns) = $this->renderNotificationMenu();
$alerts[] = $menu; $alerts[] = $menu;
$menus = array_merge($menus, $dropdowns); $menus = array_merge($menus, $dropdowns);
@ -91,8 +91,11 @@ final class PhabricatorMainMenuView extends AphrontView {
'helpURI' => '/help/keyboardshortcut/', 'helpURI' => '/help/keyboardshortcut/',
); );
$show_search = ($user->isLoggedIn()) || if ($user->isLoggedIn()) {
(PhabricatorEnv::getEnvConfig('policy.allow-public')); $show_search = $user->isUserActivated();
} else {
$show_search = PhabricatorEnv::getEnvConfig('policy.allow-public');
}
if ($show_search) { if ($show_search) {
$search = new PhabricatorMainMenuSearchView(); $search = new PhabricatorMainMenuSearchView();