Vueでルーティング権限を動的に設定する主なアイデア

Vueでルーティング権限を動的に設定する主なアイデア

以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとはあまり互換性がなかったので、自分で実装しました。主なアイデアは次のとおりです。

1. ルートを設定するときに ID をバインドします。バックエンドの開発が完了したら、バックエンドと ID を同期するだけです。この ID は一意であり、変更されません。この ID に基づいて、ルート アドレスとアイコンを見つけることができます。

定数 routerArr = [
 {
 パス: ''、
 名前: ''、
 コンポーネント: () => import( /* webpackChunkName: "strategiesMaintain" */ '@/components/Layout/Index'),
 メタ: {
 認証が必要: true、
 id: 1,
 アイコン: 'iconzhanghuguanli',
 タイトル:「ルート1」
 },
 子供たち: [{ 
 パス: '/verificationLog',
 名前: 'VerificationLog',
 コンポーネント: () => import( /* webpackChunkName: "verificationLog" */ '@/views/auditManage/verificationLog'),
 メタ: {
 認証が必要: true、
 id: 101,
 アイコン: 'icon-disanfangyanzhengrizhi',
 タイトル:「ルート11」
 }
 }, {
 パス: '/systemLog',
 名前: 'SystemLog',
 コンポーネント: () => import( /* webpackChunkName: "systemLog" */ '@/views/auditManage/systemLog'),
 メタ: {
 認証が必要: true、
 id: 102,
 アイコン: 'icon-xitongcaozuorizhi',
 タイトル:「ルート12」
 }
 }]
 }
];

デフォルトの routerArr をエクスポートします。

2. 主にIDバインディングルートアドレスとiconClassに基づいて、ローカルルートとバックエンドからのルート間の接続を設定します。

「@/router/modules」から routerModules をインポートします。
'@/utils/http' から {http} をインポートします。
'@/store' からストアをインポートします。
'element-ui' から { Message } をインポートします

const formateResData = (val) =>{ // ルーティングデータをフォーマットします const obj = {};
 定数fn = (arr)=>{
  for(let i = 0,item;item = arr[i++];){
  オブジェクト[アイテム['メタ']['id']] = {
   パス: アイテム['パス'],
   アイコンクラス: item['meta']['icon']
  };
  (item.children && item.children.length > 0)の場合{
   fn(アイテム.children);
  }
  }
 }
 fn(値);
 obj を返します。
};

const MAPOBJ = formatResData(ルーターモジュール);
const dealWithData = (navData) => { // メニューデータを処理する let firstLink = "";
 定数navIdArr = [];
 定数fn = (arr) => {
  (let i = 0,item;item = arr[i++];) {
  item['iconClass'] = MAPOBJ[item.id].iconClass;
  アイテム['linkAction'] = MAPOBJ[item.id].path;
  navIdArr.push(アイテムID);
  if (!firstLink && !item.subMenu) { // デフォルトのジャンプを設定する firstLink = item['linkAction'];
  }
  if (item.subMenu && item.subMenu.length > 0) {
   fn(item.subMenu);
  }
  }
 }
 fn(ナビゲーションデータ);
 {navData、navIdArr、firstLink} を返します。
};

navIds = [] とします。

const getNav = async (to={},from={},next=()=>{})=>{ // ナビゲーション データを取得します const {code,data} = await http("/menu/list", {}, "GET"); // メニュー データを取得します // const data = require("@/mock/api/menuData"); // モック データを使用します const {navData,navIdArr,firstLink} = dealWithData(data);
 ストアをコミットします('setNavData', navData);
 navIds = navIdArr;
 if(to.fullPath == '/index'){ // ログインするかホームページに戻る next(firstLink);
 }else { // Refreshif(navIds.indexOf(to.meta.id) == -1){ // バックエンドは menuMessage.error('メニューが存在しないか、権限がありません') を返しませんでした。
  戻る;
 }
 次();
 }
}

export const setGuard = (to={},from={},next=()=>{}) =>{ // 権限を設定します if(navIds.length === 0){ // メニューデータがまだ取得されていません getNav(to,from,next);
 }else { // メニューデータを取得します if(navIds.indexOf(to.meta.id) == -1){ // バックエンドはメニューを返しませんでした Message.error('メニューが存在しないか、権限がありません');
  戻る;
 }
 次();
 }
}

3. mainjsで設定を導入する

router.beforeEach((to, from, next) => {
 トークンを wlhStorage.get("authorization");
 to.path == "/login"の場合{
 storage.clear(); // キャッシュをクリア next();
 } それ以外 {
 if (to.meta.requireAuth && token) { // ログイン setGuard(to,from,next);
 } else { // ログインしていない next("/login");
 }
 }
})

要約する

これで、Vue でルーティング権限を動的に設定する方法についての記事は終了です。Vue でルーティング権限を動的に設定する方法についての関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の権限制御 (ルート検証) の 2 つの方法
  • Vueのルーティング権限管理に関するサンプルコード
  • Vue でルートのログイン権限を設定する方法
  • Vuexは、異なるユーザー権限に応じて異なるルーティングリスト機能を表示します。
  • Vueルーティングガード、フロントエンドページへのアクセス権限を制限する例
  • Vue ルーティングガードとページログイン権限制御を設定する方法 (2 つの方法)
  • Vue パーミッションルーティングを実装する方法の例のまとめ
  • Vueカスタム指示と動的ルーティングによる権限制御の実現
  • vue-routerはルーティング権限の実装を制御します
  • Vueルーティング権限検証機能の実装コード

<<:  ランダムな文字を生成する Java サンプルコード

>>:  ランダムロールコールテーブルを実装するためのネイティブJavaScript

推薦する

XHTML 2.0 新機能プレビュー

<br />ブラウザが次世代のXHTMLを処理できるようになる前に、このよりリッチなコン...

Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします

この間、私は docker を勉強していたのですが、nginx をデプロイするときに行き詰まりました...

CSS3 を使用した SVG パス ストロークのアニメーション化入門チュートリアル

JavaScript に依存せず、純粋な CSS を使用してsvgストローク描画アニメーション効果と...

Vueはカスタム命令を使用してページの下部に透かしを追加します

プロジェクトシナリオプロジェクトの背景全体にカスタム透かしを追加します。透かしのテキスト、フォントの...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

React useEffect の理解と使用

目次繰り返しレンダリングループを避ける副作用の除去についてReact16.8 の新しい useEff...

Docker環境にJenkinsコンテナをインストールする詳細なチュートリアル

推奨される Docker 学習教材: https://www.runoob.com/docker/d...

ウィンドウの中央にブロック要素の位置を設定する方法

ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...

ブラウザ内でHTMLタグを中央に配置するCSSスタイル

CSS スタイル:コードをコピーコードは次のとおりです。 <スタイル タイプ="te...

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...

UA による Web サイトのクロールを防ぐ Nginx のクローラー対策戦略

クローラー対策ポリシー ファイルを追加しました: vim /usr/www/server/nginx...

Docker に influxdb をインストールするための詳細なチュートリアル (パフォーマンス テスト)

1. 前提条件1. プロジェクトが展開されました2. Dockerはすでにインストールされている2...

Nginx ストリーム構成プロキシ (Nginx TCP/UDP ロード バランシング)

序章nginx が優れたリバース プロキシ サービスであることは誰もが知っています。nginx を使...

MySQLデータベースの一般的な最適化操作のまとめ(経験共有)

序文データ中心のアプリケーションの場合、データベースの品質はプログラムのパフォーマンスに直接影響する...

js キャンバスは角丸画像を実現します

この記事では、角を丸くするためのjsキャンバスの具体的なコードを参考までに紹介します。具体的な内容は...