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

推薦する

MySQL での挿入効率のいくつかの例の比較

序文最近、仕事の都合で、約 1000w の大量のデータを MySQL に挿入する必要があり、時間がか...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

HTML Webページ作成チュートリアル iframeタグを慎重に使用してください

iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...

Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

目次序文グラフィックドライバーをインストールするCUDAをアンインストールするCUDAをインストール...

MySQL をインストールするときに初期パスワードを忘れた場合のシンプルで効果的な解決策

MySQL をインストールすると初期パスワードが与えられますが、この初期パスワードは大文字と小文字の...

最もよく使用されるJavaScriptイベントについて詳しく学ぶ

目次JavaScript イベント:よく使用されるイベント:イベントアクション要約するJavaScr...

ハイパーリンクに関するいくつかの質問

<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...

HTMLコードテキストボックスの制限入力テキストボックスが灰色になり、制限テキストボックスの入力

方法 1: readonly 属性を true に設定します。入力値=読み取り専用 readOnly...

Docker で Zookeeper をインストールする (スタンドアロンおよびクラスター)

Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...

Vue 開発プロジェクトで Font Awesome 5 を使用する方法

目次依存関係をインストールする構成使用1.アイコン検索ページに入る2. 使用したいアイコンの英語名を...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...

Nginx がフロントエンド リソースへのクロスドメイン アクセスの問題をどのように解決するかの詳細な説明

フロントエンドのクロスドメイン問題に2日間近く悩まされましたが、ようやくngnxを使って解決したので...

Dockerコアとインストールの具体的な使い方

1. Docker とは何ですか? (1)DockerはLinuxコンテナ内でアプリケーションを実行...

nginx リクエスト ヘッダー データ読み取りプロセスの詳細な説明

前回の記事では、nginx がリクエスト ラインのデータを読み取って、リクエスト ラインを解析する方...

Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...