この記事では主に、vue のカスタム命令に基づいたボタンレベルの権限制御の実装について詳しく紹介します。興味のある方は一緒に学習してください。
ログイン:ユーザーが入力したアカウントとパスワードが正しいかどうかをサーバーで検証します。検証に合格すると、サーバーはトークンを取得した後、トークンを返します (ユーザーがログインできるようにするために、このトークンを sessionStorage に保存します)。ページを更新した後にステータスを記憶できる)、フロントエンドはトークンに基づいて user_info インターフェイスをプルし、ユーザーの詳細情報 (ユーザー権限、ユーザー名など) を取得します。
権限の検証: トークンを介してユーザーに対応するロールを取得し、命令をカスタマイズし、ルーティングメタ属性の btnPermissions を取得します (注: meta.btnPermissions はボタンの権限を格納する配列であり、ルーティング テーブルで構成されます) 、 btnPermissions 配列にロールが存在するかどうかを判断し、ボタン DOM が存在しない場合は削除します。
ボタンの権限はv-ifでも判定できますが、ページ数が多すぎると各ページがルーティングテーブルのユーザー権限ロールとmeta.btnPermissionsを取得してから判断する必要がある感じですカスタム命令の場合は、許可ボタンに命令を追加するだけです。
ルーティング設定:
path: '/permission',
component: Layout,
name: '权限测试',
meta: { btnPermissions: ['admin','supper','normal'] }, //页面需要的权限
children: [
{
path: 'supper',
component: _import('system/supper'),
name: '权限测试页',
meta: { btnPermissions: ['admin','supper'] } //页面需要的权限
},
{
path: 'normal',
component: _import('system/normal'),
name: '权限测试页',
meta: { btnPermissions: ['admin'] } //页面需要的权限
}
]
import Vue from 'vue'
/**权限指令**/
const has = Vue.directive('has', {
bind: function (el, binding, vnode) {
// 获取按钮权限
let btnPermissions = vnode.context.$route.meta.btnPermissions.split(",");
if (!Vue.prototype.$_has(btnPermissions)) {
el.parentNode.removeChild(el);
}
}
});
// 权限检查方法
Vue.prototype.$_has = function (value) {
let isExist = false;
let btnPermissionsStr = sessionStorage.getItem("btnPermissions");
if (btnPermissionsStr == undefined || btnPermissionsStr == null) {
return false;
}
if (value.indexOf(btnPermissionsStr) > -1) {
isExist = true;
}
return isExist;
};
export {has}
次に、main.js でファイルインポートファイル
import has from './public/js/btnPermissions.js';
ページ上のボタンに v-has を追加するだけです
<el-button @click='editClick' type="primary" v-has>编辑</el-button>
結論:
アクセス許可にはフロントエンドとアクセス許可の組み合わせが必要です制御するには、次のことを覚えておいてください。決してユーザー入力を信用しないでください。
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
Vue が Redux を使用する方法
Vue+mui を使用して画像のローカル キャッシュを実装する方法
Vue のルーティング インターセプトとページ ジャンプ設定の方法の紹介
以上がVue のカスタム命令に基づいてボタンレベルの権限制御を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。