Vue2/vue3 ルーティング権限管理方法の例

Vue2/vue3 ルーティング権限管理方法の例

1. Vueルーティングの権限制御には一般的に2つの方法があります

a. ルーティングメタ情報(メタ)
b. メニューとルートを動的にロードする(addRoutes)

2 ルーティング権限を制御するためのルーティングメタ情報(メタ)

2.1 vue2での実装

ウェブサイトに管理者や一般ユーザーなどの異なる役割がある場合、異なるページにアクセスするには異なる役割が必要になります。

この時点で、すべてのページをルーティング テーブルに配置し、アクセスするときにロールの権限を判断するだけで済みます。権限がある場合はアクセスを許可します。権限がない場合はアクセスを拒否し、404 ページに移動します。

vue-router は、ルートを構築するときにメタ構成インターフェースを提供します。メタ情報にルートに対応する権限を追加し、ルートガードで関連する権限をチェックしてルートジャンプを制御できます。

各ルートのメタ属性のロールに、ルートにアクセスできるロールを追加できます。各ユーザーがログインすると、そのユーザーのロールが返されます。次に、ページにアクセスすると、ルートのメタ属性がユーザーのロールと比較されます。ユーザーのロールがルートのロール内にある場合は、アクセスが許可されます。そうでない場合は、アクセスが拒否されます。

Vue2 では次のように実装されています。

'vue-router' から VueRouter をインポートします。
Vue.use(VueRouter)
...
ルート: [
  {
    パス: '/login',
    名前: 'ログイン',
    メタ: {
      役割: ['管理者', 'ユーザー']
    },
    コンポーネント: () => import('../components/Login.vue')
  },
  {
    パス: 'ホーム',
    名前: 'ホーム',
    メタ: {
      役割: ['管理者']
    },
    コンポーネント: () => import('../views/Home.vue')
  },
]

const ルーター = 新しい VueRouter({
  ルート
})

デフォルトルーターをエクスポートする

app.vueファイルに導入し、グローバルルーティングガードを登録します。

//管理者とユーザーの2つの役割があると仮定します 
//バックグラウンドから取得したユーザーロール const role = 'user'
//ページに入ると、ナビゲーションガード router.beforeEach イベントがトリガーされます router.beforeEach((to,from,next)=>{
  to.meta.roles.includes(role) の場合 {
   next() //リリース}esle{
   next({path:"/404"}) //404ページにジャンプ}
})

これからは基本的なルーティング許可制御が完了します

話はそれますが、ルート ガードは、ルートが一致しない場合に 404 ページを転送するというビジネス上の要求も解決できます。これは次のように実現できます。

'./router' からルーターをインポートします
router.beforeEach((to, from, next) => {
   // ...
    一致する長さが 0 の場合
        次へ('/404')
    } それ以外 {
        次()
    }
    //console.log(to、from、next、'ルートガード')
})

2.2 vue3での実装

実際、考え方は似ていますが、Vue3 でのルーティングの使用方法は Vue2 とは少し異なることに注意してください。Vue3 インスタンスを作成するには、よりシンプルな 404 を使用します。Vue3 のルーティング許可制御については、Vue2 と次のコードに従って、次のようにコードを実装できます。

ルートを作成します。

'vue-router' から createRouter、createWebHashHistory をインポートします。
...
ルート: [
  {
    パス: '/login',
    名前: 'ログイン',
    メタ: {
      役割: ['管理者', 'ユーザー']
    },
    コンポーネント: () => import('../components/Login.vue')
  },
  {
    パス: 'ホーム',
    名前: 'ホーム',
    メタ: {
      役割: ['管理者']
    },
    コンポーネント: () => import('../views/Home.vue')
  },
]
const ルーター = createRouter({
    履歴: createWebHashHistory(),
    ルート: ルーター
})
デフォルトルーターをエクスポートします。

ルーティング ガード (App.vue にグローバルに登録):

輸入 {
    ルーターを使用する
} 'vue-router' から;
エクスポートデフォルト{
    名前: 'アプリ'、
    設定() {
        定数ルーター = useRouter();
        router.beforeEach((to, from, next) => {
            // ...
            一致する長さが 0 の場合
                次へ('/404')
            } それ以外 {
                次()
            }
        })
    }
}

4. メニューとルートを動的に読み込む(addRoutes)

ユーザ権限やユーザ属性に応じてメニューやルーティングテーブルを動的に追加し、ユーザ機能をカスタマイズします。vue-router はルートを動的に登録できる addRoutes() メソッドを提供します。ルートを動的に追加するということは、ルーティングテーブルにルートをプッシュするということに注意する必要があります。ルートは順番にマッチングされるため、404 ページなどのルートは動的に追加したルートの最後尾に配置する必要があります。

5. まとめ

vue2 であっても vue3 であっても、実装のアイデアは実際には似ていますが、インターフェイスの使用方法の詳細は若干異なります。私たちにとって、学習の焦点は特定のフレームワークに置くのではなく、自分自身の思考を訓練することに置く必要があります。

vue2/vue3 ルーティング権限管理に関するこの記事はこれで終わりです。vue ルーティング権限管理に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明
  • Vue3.0とBootstrapを組み合わせてマルチページアプリケーションを作成する
  • Vue3.0はドロップダウンメニューのカプセル化を実装します
  • Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します
  • Vue2.x と Vue3.x のルーティングフックの違いの詳細な説明
  • Vue3ルーティングVueRouter4を使用する簡単な例
  • Vue3 ページ、メニュー、ルートの使用

<<:  VMware 仮想マシンのインストール Linux システムのグラフィック チュートリアル

>>:  MySQL 5.7 でルートパスワードを変更する方法に関するチュートリアル

推薦する

Robots.txtの詳細な紹介

robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...

LeetCode の SQL 実装 (184. 部門内で最も高い給与)

[LeetCode] 184. 部門最高給与従業員テーブルにはすべての従業員が保存されます。すべて...

Linux ユーザー スクリプトの作成/推測ゲーム/ネットワーク カード トラフィック監視の紹介

目次1. ユーザーが作成したスクリプト2. 単語当てゲーム3. ネットワークカードのトラフィック監視...

Mysql で自動増分主キー ID を更新するときに問題が発生しました

目次自動インクリメント ID を更新する理由は何ですか?質問解決方法これは私が知っている問題ですが、...

HTML+CSS+jQuery はスクリーンショットで検索ホットリストタブ効果を模倣します

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

Flex レイアウトで適応型ページを作成する (構文と例)

Flex レイアウトの紹介英語の Flex はフレキシブル ボックス、つまり伸縮性のあるボックスを...

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明

問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...

Vue を使用して Web ページのスクリーンショットを撮る方法をご存知ですか?

目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...

Docker は次の「Linux」になれるか?

Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...

alpineをベースにdockerfileで作成したtomcatイメージの実装

1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...

MySQL 8.0.20 のインストールと設定方法のグラフィックチュートリアル

MySQLのダウンロードとインストール(バージョン8.0.20)のチュートリアルは参考までに、具体的...