今回は、vue iviewの動的ルーティングと権限の検証の手順について詳しく説明します。vue iviewの動的ルーティングと権限の検証を使用する際の注意事項は何ですか?実際のケースを見てみましょう。
github には Vue で動的にルートを追加する例がたくさんあります。いくつかのプロジェクトを参照した後、このプロジェクトは iview フレームワークに基づいて動的ルートの動的追加とメニューの更新を完了しました。困っている他の友達を助けるために、私は実装ロジックを共有します。一緒にコミュニケーションをとって学びましょう。 Githubアドレスiview-dynamicRouter目標を達成する
クライアントはサーバーからルーティングとパーミッションのデータを取得した後、プロジェクトのルーティングとメニューのリストを更新し、パーミッション制御を実行します。プロジェクトの基礎
実装ロジック
動的ルーティング制御の読み込み
一般に、動的ルーティング制御は2つのタイプに分けられます。1つは、すべてのルーティングデータをローカルファイルに保存し、その後取得するものです。サーバーからユーザーの権限情報を取得し、ルートジャンプ時の権限判定フックを追加します。ユーザーが遷移したページが権限リストにない場合、ジャンプを禁止します。もう 1 つは、iview-admin プロジェクトはルートを 3 つのタイプに分けます:ブレッドクラム ナビゲーション
の下で appRouter を走査してルーティング情報を取得するため、グローバル アクセスのためにルーティング データも vuex に保存する必要があります。ルーティング アドレス
が見つからない場合は、デフォルトでは 404 エラー ページにジャンプし、エクスペリエンスが非常に悪いため、404 ルートは最初にルーティング ルールに書き込まれず、動的ルーティングと一緒にロードされます。//main.js mounted () { // 调用方法,动态生成路由 util.initRouter(this); }
動的ルーティングの実装と同様操作許可制御には大きく分けて 2 種類あり、1 つはページ表示時に許可を制御しない、操作開始時に許可判定を行う方法です。 2 番目の方法は、ページの読み込み時に権限を判断し、権限のない操作は表示されません。私は、ユーザーに誤解を与えない 2 番目の方法を好みます。個人的には、ユーザーに表示されるものが操作可能であるべきだと考えています。そうしないと、ボタンをクリックした後に許可がないとメッセージが表示されるのは非常に不快です。 このプロジェクトのアイデアのソースについては、参照ブログ投稿を参照してください。元のブロガーの具体的なアイデアは次のとおりです。ルーティング構造のメタ フィールドに、
ユーザー操作許可リストを追加し、グローバル コマンドを登録します。ノードが初めてレンダリングされるとき、ページの権限が存在するかどうかを確認し、権限が存在し、渡されたパラメータが権限リストにない場合、ノードは直接削除されます。
主なコードの実装は次のとおりです: ルーティング データに許可フィールドを追加して、許可リストを保存します
//menu.json,模拟异步请求数据 [ { "path": "/groupOne", "icon": "ios-folder", "name": "system_index", "title": "groupOne", "component": "Main", "children": [ { "path": "pageOne", "icon": "ios-paper-outline", "name": "pageOne", "title": "pageOne", "component": "group/page1/page1", "permission":["del"] }, ... ] } ]
在遍历生成路由节点时,将 permission 字段数据存入路由节点 meta 属性中
//util.js //生成路由节点 util.initRouterNode = function (routers, data) { for (var item of data) { .... //添加权限判断 meta.permission = menu.permission ? menu.permission : null; ... } };
定义全局命令组件,读取路由 permission 属性值获得权限列表,如果该不权限在权限列表中,则删除节点
//hasPermission.js const hasPermission = { install (Vue, options) { Vue.directive('hasPermission', { bind (el, binding, vnode) { let permissionList = vnode.context.$route.meta.permission; if (permissionList && permissionList.length && !permissionList.includes(binding.value)) { el.parentNode.removeChild(el); } } }); } }; export default hasPermission;
权限组件使用示例:
<template> <p> <h1>page1</h1> <Button v-hasPermission="'add'">添加</Button> <Button v-hasPermission="'edit'">修改</Button> <Button v-hasPermission="'del'">删除</Button> </p> </template>
全局注册组件
// main.js import hasPermission from '@/libs/hasPermission.js'; Vue.use(hasPermission);
这种权限控制方法的优点就是,不管是管理配置还是页面处理逻辑都相对简单,没有很多重复的代码判断和节点处理,在参考对比了网上几种实现方式后,个人比较推荐这一种方法。
页面标签和面包屑导航
在我看来,页面标签和面包屑都属于系统中锦上添花的页面相关控件,提高页面管理的便捷性,在iview官方admin项目中已经实现了这两个组件。所以这个项目中,只是将其进行移植,实现了组件功能,没有深入了解,感兴趣的可以仔细研究。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がvue iview 動的ルーティングと権限検証手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。