アリeggフレームワークに基づいてブログを構築する(4)--権限制御
3406 ワード
関連記事
アリeggフレームワークに基づくブログ構築(1)——開発準備アリeggフレームワークに基づくブログ構築(2)——Hello Worldアリeggフレームワークに基づくブログ構築(3)——登録と登録アリeggフレームワークに基づくブログ構築(4)——権限制御アリeggフレームワークに基づくブログ構築(5)——トップナビゲーションバーアリeggフレームワークに基づくブログ構築(6)——閲覧、発表文章はアリeggフレームワークに基づいてブログを構築する(7)--文章を編集する
git
https://github.com/ZzzSimon/e...好きならいいね!
本文
前の文章では、ユーザーの登録とログインを実現しました.次に、ユーザー権限を制御する必要があります.例えば、普通のユーザーはコメントしかできません.管理者は文章を発表することができます.最高の管理者はユーザー権限を変更することができます.権限制御は汎用的な機能であるため,この機能をミドルウェアにした.ミドルウェアについて:
公式ドキュメント:https://eggjs.org/zh-cn/basic...
きのうせっけいユーザー1人につき1ロール は、プロファイル構成によって、あるロールが使用する権限のないページとインタフェース を構成することができる.は、ユーザと権限を検証する必要のないpathを構成することができる.例えば、登録と登録に関するページとインタフェース ログインしてからアクセスできるpathのみ、そうでなければログインページをジャンプします.
Userテーブル、role(ロール)フィールドを追加
プロファイル
私たちはconfig/config.default.jsには以下の内容が含まれています.
そのうち:
auth.jsミドルウェアコード
効果
ユーザーを作成し、ユーザーロールを付与します.プロファイルから、ユーザーロールは
正規一致
ページが多ければ多いほど、パラメータ付きpathがダイナミックな場合は、pathをフィルタするルールが必要です.この場合、正則マッチングを使用する必要があります.
このとき、プロファイルは正規表現をサポートします.
の最後の部分
読み終わって役に立つと思ったら、作者に好きなものをあげてください.ありがとう!
アリeggフレームワークに基づくブログ構築(1)——開発準備アリeggフレームワークに基づくブログ構築(2)——Hello Worldアリeggフレームワークに基づくブログ構築(3)——登録と登録アリeggフレームワークに基づくブログ構築(4)——権限制御アリeggフレームワークに基づくブログ構築(5)——トップナビゲーションバーアリeggフレームワークに基づくブログ構築(6)——閲覧、発表文章はアリeggフレームワークに基づいてブログを構築する(7)--文章を編集する
git
https://github.com/ZzzSimon/e...好きならいいね!
本文
前の文章では、ユーザーの登録とログインを実現しました.次に、ユーザー権限を制御する必要があります.例えば、普通のユーザーはコメントしかできません.管理者は文章を発表することができます.最高の管理者はユーザー権限を変更することができます.権限制御は汎用的な機能であるため,この機能をミドルウェアにした.ミドルウェアについて:
公式ドキュメント:https://eggjs.org/zh-cn/basic...
きのうせっけい
Userテーブル、role(ロール)フィールドを追加
プロファイル
私たちはconfig/config.default.jsには以下の内容が含まれています.
auth : {
noAuth:['/login.htm','/user/login','/register.htm','/user/register'],
noPermission:{
admin:[],
manager:['/admin.htm'],
user:['/admin.htm','/edit.htm']
}
}
そのうち:
noAuth
ノード構成は、認証なしでアクセスできるpath noPermission
ノード構成であり、各ロールがアクセスできないpathであるauth.jsミドルウェアコード
app/middleware/auth.js
ファイルを作成します.module.exports = (options, app) => {
return async function auth(ctx, next) {
// session
if (typeof (ctx.session.user) !== 'undefined') {
const username = ctx.session.user.username;
// , , : , 。 : , redis
// , session, : , 。 : session,
const role = await ctx.service.user.getRoleByUsername(username);
const noPerList = options.noPermission[role];
if (noPerList && !noPerList.includes(ctx.path)) {
await next();
} else {
ctx.body = ' , !';
}
//
} else if (options.noAuth.includes(ctx.path)) {
await next();
// session
} else {
ctx.redirect('/login.htm')
}
}
};
効果
ユーザーを作成し、ユーザーロールを付与します.プロファイルから、ユーザーロールは
/edit.htm
パスにアクセスできません.図:正規一致
ページが多ければ多いほど、パラメータ付きpathがダイナミックな場合は、pathをフィルタするルールが必要です.この場合、正則マッチングを使用する必要があります.
auth.js
ファイルを変更します.module.exports = (options, app) => {
function isNoPer(noPerList,path) {
for (let i = 0;i
このとき、プロファイルは正規表現をサポートします.
auth : {
noAuth:['/login.htm','/user/login','/register.htm','/user/register'],
noPermission:{
admin:[],
manager:['/admin.htm'],
user:['/admin.htm','/edit.*']
}
}
の最後の部分
読み終わって役に立つと思ったら、作者に好きなものをあげてください.ありがとう!