第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 JavaScript / TypeScript 中使用“instanceof”授權(quán)用戶模型是否

在 JavaScript / TypeScript 中使用“instanceof”授權(quán)用戶模型是否

瀟湘沐 2023-09-21 18:23:37
假設(shè)我有 3 個模型:管理員、用戶、產(chǎn)品(我正在使用模型類)只有管理員可以添加、更新、刪除產(chǎn)品,用戶只能獲取產(chǎn)品,所以我為相應(yīng)的路由注冊了一個ACL中間件?,F(xiàn)在在我的 ACL 中間件中,我想授權(quán)用戶,如果他們是ADMIN,我將調(diào)用next()方法,否則,我將使用401.我發(fā)現(xiàn)使用 JavaScript 的運(yùn)算符很容易進(jìn)行檢查instanceof:const user = await auth.authenticate()if (user instanceof Admin) {  await next()} else {  throw UnAuthorizedUserException}await auth.authenticate()返回發(fā)送請求的當(dāng)前用戶,無論是用戶還是管理員但是,我不確定這是否是區(qū)分黑白管理員和用戶的最安全方法?,F(xiàn)在我的問題是,我這樣做對嗎?哪種方法比我正在做的更好?注意(如果有幫助):我正在使用 Adonis.js v5、TypeScript 和 Lucid 模型
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個贊

是的,你可以這樣做。如果使用此方法,您將需要小心繼承模式。您可能需要考慮向用戶對象添加角色屬性并將其用于檢查。


使用角色屬性的示例。


if (user.role === 'ADMIN') {

  ...

}

instanceof 對你產(chǎn)生適得其反的例子


class User {}

class Admin extends User {}


const user = new User;

const admin = new Admin;


console.log(user instanceof User); // true

console.log(user instanceof Admin); // false

console.log(admin instanceof User); // true **watch out for this**

console.log(admin instanceof Admin); // true


查看完整回答
反對 回復(fù) 2023-09-21
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個贊

instanceof運(yùn)算符測試構(gòu)造函數(shù)的原型屬性是否出現(xiàn)在對象原型鏈中的任何位置。返回值是一個布爾值。

因此,如果是或其子類實(shí)例,user instanceof Admin將測試為正。使用這種模式在 JS/TS 世界中非常常見,只要正確驗(yàn)證用戶并且返回相同的類方法,它就是安全的。userAdminauth.authenticate()Adminauthenticate

同樣在 TypeScript 中instanceof被視為TypeGuard,因此在if塊內(nèi)您可以用作user實(shí)例Admin(例如,如果管理實(shí)例有更多方法)。


查看完整回答
反對 回復(fù) 2023-09-21
  • 2 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號