亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

在 JavaScript / TypeScript 中使用“instanceof”授權用戶模型是否

在 JavaScript / TypeScript 中使用“instanceof”授權用戶模型是否

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

2 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

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


使用角色屬性的示例。


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

  ...

}

instanceof 對你產生適得其反的例子


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


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

TA貢獻1864條經驗 獲得超2個贊

instanceof運算符測試構造函數的原型屬性是否出現在對象原型鏈中的任何位置。返回值是一個布爾值。

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

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


查看完整回答
反對 回復 2023-09-21
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號