ルーティング権限制御は、さまざまなビジネス担当者がアクセスできるページの権限を制限するために、バックグラウンド管理システムでよく使用されます。 許可のないページの場合は、404 ページにジャンプするか、許可がないことを示すプロンプトを表示できます。 方法 1: ルーティング メタ情報 (meta)すべてのページをルーティング テーブルに配置し、アクセスするときにロールの権限を確認するだけです。 メタ属性で、このルートにアクセスできるロールを roles に追加します。各ユーザーがログインすると、そのユーザーのロールが返されます。次に、ページにアクセスすると、ルートのメタ属性がユーザーのロールと比較されます。ユーザーのロールがルートのロール内にある場合は、アクセスが許可されます。そうでない場合は、アクセスが拒否されます。 例1: 役割による判断 定数myRouter = 新しいVueRouter({ ルート: [{ パス: '/login', 名前: 'ログイン', メタ: { 役割: ['管理者', 'ユーザー'] }, コンポーネント: () => import('@/components/Login') },{ パス: '/home', 名前: 'ホーム', メタ: { 役割: ['管理者'] }, コンポーネント: () => import('@/views/Home') },{ パス: '/404', コンポーネント: () => import('@/components/404') }] }) //インターフェースを通じてバックグラウンドから取得したユーザーロールをトークンに格納できると仮定します。const role = 'user' myRouter.beforeEach((to,from,next)=>{ to.meta.roles.includes(role) の場合 { next() //解放 }else{ next({path:"/404"}) //404ページにジャンプ} }) 例2: 権限を必要とする識別子をメタに追加する 定数myRouter = 新しいVueRouter({ ルート: [{ パス: '/login', 名前: 'ログイン', メタ: { タイトル: 「ログインページ」 アイコン: 「ログイン」 }, コンポーネント: () => import('@/components/Login') },{ パス: '/home', 名前: 'ホーム', メタ: { タイトル: 「ホーム」 アイコン: 'ホーム'、 認証が必要: 有効 }, コンポーネント: () => import('@/views/Home') },{ パス: '/404', コンポーネント: () => import('@/components/404') }] }) myRouter.beforeEach((to,from,next)=>{ flag = to.matched.some(record=>record.meta.requireAuth) とします。 //ここでは、一致したループを使用して、to.meta が直接使用されない理由を見つけます。 // サブルートがある場合は、まず通常のクリックロジックに従って、第 1 レベルのルートの次に第 2 レベルのルートが実行され、権限の判断が同じでなければならないことを明確にします //to.meta => サブルートのメタを直接検索します。第 1 レベルのルートに requireAuth:true が追加されていない場合は、第 1 レベルのルートページをブロックし、第 2 レベルのルートページに入ることができません。ユーザーが URL アドレスバーを直接改ざんすると、第 2 レベルのページに入ることができ、権限の問題が発生する可能性があります。次に、この権限の下にあるすべてのルートを //to.matched としてマークする必要があります => matched はルート配列であり、サブルートを含むすべてのルートの属性を収集するため、ループ判断と検索方法を通じて、第 1 レベルのルートに権限識別子を追加するだけで、その下にある他のサブルートを承認できます。 if(フラグ){ 次() }それ以外{ 次へ({パス:"/404"}) } }) デメリット: 各ルートジャンプを検証するのはコンピューティング リソースの無駄です。また、ユーザーがアクセスできないルートは、理論上はマウントすべきではありません。 方法 2: ルーティング テーブルを動的に生成する (addRoutes)ユーザー権限やユーザー属性に基づいてメニューやルーティング テーブルを動的に追加することで、ユーザー機能をカスタマイズできます。 //ストア.js // vuexに動的に登録する必要があるルートを抽出します。const dynamicRoutes = [ { パス: '/manage', 名前: '管理'、 メタ: { 認証が必要: 有効 }, コンポーネント: () => import('./views/Manage') }, { パス: '/userCenter', 名前: 'UserCenter', メタ: { 認証が必要: 有効 }, コンポーネント: () => import('./views/UserCenter') } ] ユーザーのカスタマイズされたメニューを保存するには、vuex に userRoutes 配列を追加します。 setUserInfo では、バックエンドから返されたメニューに従ってユーザーのルーティング テーブルが生成されます。 //ストア.js setUserInfo (状態、ユーザー情報) { state.userInfo = ユーザー情報 state.auth = true // ユーザー情報を取得するときにauthをtrueにします。もちろん、userInfoを直接判断することもできます。 // ユーザールーティングテーブルを生成する state.userRoutes = dynamicRoutes.filter(route => { userInfo.menus.some(menu => menu.name === route.name) を返します }) router.addRoutes(state.userRoutes) // ルートを登録する} メニューのレンダリングを変更する // アプリ.vue <div id="nav"> <router-link to="/">ホーム</router-link> <router-link to="/login">ログイン</router-link> <template v-for="(menu, index) of $store.state.userInfo.menus"> <ルーターリンク:to="{ name: menu.name }":key="index">{{menu.title}}</ルーターリンク> </テンプレート> </div> Vue のルーティング許可制御を実装する 2 つの方法についての記事はこれで終わりです。Vue のルーティング許可制御に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker コンテナのカスタム ホストのネットワーク アクセス操作
>>: MySQLとRedisキャッシュ間の同期ソリューションについての簡単な説明
<br />前の記事:Webデザインチュートリアル(5):Webビジュアルデザイン。 1...
目次クッキーの設定方法クッキーのデメリット: LocalStorage と SessionStora...
1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...
序文:さまざまな技術職の面接では、MySQL 関連の質問がよくされるようです。開発職の面接でも運用職...
MySQL と接続関連のタイムアウト序文:今日、同僚から、データ量が多いときに MySQL データベ...
目次vue2.xプレコンセプト:ルーティングフックのカテゴリルーティングとコンポーネントの概念(フッ...
Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...
概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...
1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...
高い同時実行性とは何ですか?デフォルトの Linux カーネル パラメータは、最も一般的なシナリオ向...
1. mycatとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベ...
この記事では、参考までに、Navicatを使用してCSVファイルをMySQLにインポートするための具...
アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...
以下のデモはMySQLバージョン5.7.27に基づいています。 1. MySQLサブクエリ最適化戦略...
目次アニメーションプレビューその他のUIライブラリ始めるコンポーネントディレクトリ構造トーストおおよ...