Merged PR 566: xxxのサンプルページを消し去る
## 概要 [Task3055: xxxのサンプルページを消し去る](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3055) - 仮で置いてあったサンプルページ削除 - タブからも削除 - ルーティングからも削除 - ログイン成功時、階層とロールに応じて遷移する画面を変更する処理を追加 ## レビューポイント - 遷移先を変更する処理は関数に切り出した方が良いか? - ほかで使わないからべた書きでも良いかなと思い、こうしました。 ## UIの変更 - Before/Afterのスクショなど - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3055?csf=1&web=1&e=B0E9Ud ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば
This commit is contained in:
parent
6d163a9067
commit
4b0110856c
@ -2,7 +2,6 @@ import { Route, Routes } from "react-router-dom";
|
||||
import TopPage from "pages/TopPage";
|
||||
import AuthPage from "pages/AuthPage";
|
||||
import LoginPage from "pages/LoginPage";
|
||||
import SamplePage from "pages/SamplePage";
|
||||
import { AuthErrorPage } from "pages/ErrorPage";
|
||||
import { NotFoundPage } from "pages/ErrorPage/notFound";
|
||||
import { RouteAuthGuard } from "components/auth/routeAuthGuard";
|
||||
@ -53,11 +52,6 @@ const AppRouter: React.FC = () => (
|
||||
path="/license"
|
||||
element={<RouteAuthGuard component={<LicensePage />} />}
|
||||
/>
|
||||
<Route
|
||||
path="/xxx"
|
||||
element={<RouteAuthGuard component={<SamplePage />} />}
|
||||
/>
|
||||
{/* XXX ヘッダーの挙動確認のため仮のページを作成 */}
|
||||
<Route
|
||||
path="/account"
|
||||
element={<RouteAuthGuard component={<AccountPage />} />}
|
||||
|
||||
@ -7,7 +7,6 @@ export const HEADER_MENUS_LICENSE = "License";
|
||||
export const HEADER_MENUS_DICTATIONS = "Dictations";
|
||||
export const HEADER_MENUS_WORKFLOW = "Workflow";
|
||||
export const HEADER_MENUS_PARTNER = "Partners";
|
||||
export const HEADER_MENUS_XXX = "XXX"; // XXX 仮のタブ
|
||||
|
||||
export const HEADER_MENUS: {
|
||||
key: HeaderMenus;
|
||||
@ -44,7 +43,6 @@ export const HEADER_MENUS: {
|
||||
label: getTranslationID("common.label.headerPartners"),
|
||||
path: "/partners",
|
||||
},
|
||||
{ key: HEADER_MENUS_XXX, label: "xxx", path: "/xxx" }, // XXX 仮のタブ
|
||||
];
|
||||
|
||||
export const HEADER_NAME = getTranslationID("common.label.headerName");
|
||||
|
||||
@ -8,8 +8,7 @@ export type HeaderMenus =
|
||||
| "License"
|
||||
| "Dictations"
|
||||
| "Workflow"
|
||||
| "Partners"
|
||||
| "XXX";
|
||||
| "Partners";
|
||||
|
||||
// ログイン後に遷移しうるパス
|
||||
export type LoginedPaths =
|
||||
@ -18,5 +17,4 @@ export type LoginedPaths =
|
||||
| "/license"
|
||||
| "/dictations"
|
||||
| "/workflow"
|
||||
| "/partners"
|
||||
| "/xxx";
|
||||
| "/partners";
|
||||
|
||||
@ -20,7 +20,6 @@ export const isLoginPaths = (d: string): d is LoginedPaths => {
|
||||
case "/dictations":
|
||||
case "/workflow":
|
||||
case "/partners":
|
||||
case "/xxx":
|
||||
return true;
|
||||
default: {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
|
||||
@ -81,7 +81,9 @@ export const isAdminUser = (): boolean => {
|
||||
if (!token) {
|
||||
return false;
|
||||
}
|
||||
return token.role.includes(ADMIN_ROLES.ADMIN);
|
||||
// token.roleを" "で分割して配列にする
|
||||
const role = token.role.split(" ");
|
||||
return role.includes(ADMIN_ROLES.ADMIN);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -95,7 +97,9 @@ export const isStandardUser = (): boolean => {
|
||||
if (!token) {
|
||||
return false;
|
||||
}
|
||||
return token.role.includes(ADMIN_ROLES.STANDARD);
|
||||
// token.roleを" "で分割して配列にする
|
||||
const role = token.role.split(" ");
|
||||
return role.includes(ADMIN_ROLES.STANDARD);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -108,7 +112,9 @@ export const isAuthorUser = (): boolean => {
|
||||
if (!token) {
|
||||
return false;
|
||||
}
|
||||
return token.role.includes(USER_ROLES.AUTHOR);
|
||||
// token.roleを" "で分割して配列にする
|
||||
const role = token.role.split(" ");
|
||||
return role.includes(USER_ROLES.AUTHOR);
|
||||
};
|
||||
|
||||
/**
|
||||
@ -132,5 +138,8 @@ export const isTypistUser = (): boolean => {
|
||||
if (!token) {
|
||||
return false;
|
||||
}
|
||||
return token.role.includes(USER_ROLES.TYPIST);
|
||||
// token.roleを" "で分割して配列にする
|
||||
const role = token.role.split(" ");
|
||||
// roleの中に"typist"が含まれているかどうかを返す
|
||||
return role.includes(USER_ROLES.TYPIST);
|
||||
};
|
||||
|
||||
@ -1,7 +1,14 @@
|
||||
import { useMsal } from "@azure/msal-react";
|
||||
import { AppDispatch } from "app/store";
|
||||
import { isIdToken } from "common/token";
|
||||
import { loadAccessToken, loadRefreshToken } from "features/auth";
|
||||
import {
|
||||
clearToken,
|
||||
isAdminUser,
|
||||
isApproveTier,
|
||||
isStandardUser,
|
||||
loadAccessToken,
|
||||
loadRefreshToken,
|
||||
} from "features/auth";
|
||||
import { loginAsync, selectLocalStorageKeyforIdToken } from "features/login";
|
||||
import React, { useCallback, useEffect } from "react";
|
||||
import Footer from "components/footer";
|
||||
@ -10,6 +17,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { isErrorObject } from "common/errors";
|
||||
import { TIERS } from "components/auth/constants";
|
||||
|
||||
const LoginPage: React.FC = (): JSX.Element => {
|
||||
const { instance } = useMsal();
|
||||
@ -51,7 +59,29 @@ const LoginPage: React.FC = (): JSX.Element => {
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
navigate("/xxx");
|
||||
// 第一~第四階層の管理者はライセンス画面へ遷移
|
||||
if (
|
||||
isApproveTier([TIERS.TIER1, TIERS.TIER2, TIERS.TIER3, TIERS.TIER4]) &&
|
||||
isAdminUser()
|
||||
) {
|
||||
navigate("/license");
|
||||
return;
|
||||
}
|
||||
// 第五階層の管理者はユーザー画面へ遷移
|
||||
if (isApproveTier([TIERS.TIER5]) && isAdminUser()) {
|
||||
navigate("/user");
|
||||
return;
|
||||
}
|
||||
// 一般ユーザーはdictationPageへ遷移
|
||||
if (isStandardUser()) {
|
||||
navigate("/dictations");
|
||||
return;
|
||||
}
|
||||
// それ以外は認証エラー画面へ遷移
|
||||
instance.logoutRedirect({
|
||||
postLogoutRedirectUri: "/AuthError",
|
||||
});
|
||||
clearToken();
|
||||
}
|
||||
},
|
||||
[dispatch, i18n.language, instance, navigate]
|
||||
|
||||
@ -1,39 +0,0 @@
|
||||
import { useMsal } from "@azure/msal-react";
|
||||
import { AppDispatch } from "app/store";
|
||||
import { UpdateTokenTimer } from "components/auth/updateTokenTimer";
|
||||
import Footer from "components/footer";
|
||||
import Header from "components/header";
|
||||
import { clearToken } from "features/auth";
|
||||
import { clearUserInfo } from "features/login";
|
||||
|
||||
import React from "react";
|
||||
import { useDispatch } from "react-redux";
|
||||
import styles from "styles/app.module.scss";
|
||||
|
||||
const SamplePage: React.FC = (): JSX.Element => {
|
||||
const { instance } = useMsal();
|
||||
const dispatch: AppDispatch = useDispatch();
|
||||
|
||||
return (
|
||||
<div className={styles.wrap}>
|
||||
<Header />
|
||||
<UpdateTokenTimer />
|
||||
<div>
|
||||
<button
|
||||
type="button"
|
||||
className={styles.buttonText}
|
||||
onClick={() => {
|
||||
instance.logoutRedirect({ postLogoutRedirectUri: "/" });
|
||||
dispatch(clearToken());
|
||||
dispatch(clearUserInfo());
|
||||
}}
|
||||
>
|
||||
sign out
|
||||
</button>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SamplePage;
|
||||
Loading…
x
Reference in New Issue
Block a user