W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
隨著您的應(yīng)用程序范圍和用戶群的增長,您可能會(huì)發(fā)現(xiàn)自己需要對(duì)數(shù)據(jù)片段的訪問進(jìn)行更粗粒度的控制,而用戶鏈接的 ACL 無法提供這些控制。為了滿足這一要求,Moralis 支持一種“基于角色的訪問控制”形式。角色提供了一種對(duì)擁有 Moralis 數(shù)據(jù)的公共訪問權(quán)限的用戶進(jìn)行分組的邏輯方式。角色是包含用戶和其他角色的命名對(duì)象。授予角色的任何權(quán)限都隱式授予其用戶以及它包含的任何角色的用戶。
例如,在您的包含策劃內(nèi)容的應(yīng)用程序中,您可能有許多被視為“版主”的用戶,可以修改和刪除其他用戶創(chuàng)建的內(nèi)容。您可能還擁有一組“管理員”用戶,并被授予與版主相同的所有權(quán)限,但也可以修改應(yīng)用程序的全局設(shè)置。通過將用戶添加到這些角色,您可以確保新用戶可以成為版主或管理員,而無需手動(dòng)為每個(gè)用戶授予每個(gè)資源的權(quán)限。
我們提供了一個(gè)名為 ?Moralis.Role
? 的專用類,它在您的客戶端代碼中表示這些角色對(duì)象。 ?Moralis.Role
? 是 ?Moralis.Object
? 的子類,具有所有相同的功能,例如靈活的模式、自動(dòng)持久性和鍵值接口。 ?Moralis.Object
? 上的所有方法也存在于 ?Moralis.Role
? 上。不同之處在于 ?Moralis.Role
? 有一些特定于角色管理的附加功能。
?Moralis.Role
? 有幾個(gè)與 ?Moralis.Object
? 不同的屬性:
name
?:角色的名稱。 此值是必需的,并且只能在創(chuàng)建角色時(shí)設(shè)置一次。 名稱必須由字母數(shù)字字符、空格、- 或 _ 組成。 此名稱將用于標(biāo)識(shí)角色,而不需要其 objectId。
users
?:與將繼承授予包含角色的權(quán)限的用戶集的關(guān)系。
roles
?:與角色集的關(guān)系,其用戶和角色將繼承授予包含角色的權(quán)限。?Moralis.Role
? 使用與 Moralis 上的所有其他對(duì)象相同的安全方案 (ACL),但它需要顯式設(shè)置 ACL。 通常,只有具有極大提升權(quán)限的用戶(例如主用戶或管理員)才能創(chuàng)建或修改角色,因此您應(yīng)該相應(yīng)地定義其 ACL。 請(qǐng)記住,如果您為某個(gè)用戶授予 ?Moralis.Role
? 寫入權(quán)限,則該用戶可以將其他用戶添加到該角色,甚至完全刪除該角色。
要?jiǎng)?chuàng)建一個(gè)新的 ?Moralis.Role
?,您可以編寫:
// By specifying no write privileges for the ACL, we can ensure the role cannot be altered.
const roleACL = new Moralis.ACL();
roleACL.setPublicReadAccess(true);
const role = new Moralis.Role("Administrator", roleACL);
role.save();
您可以通過 ?Moralis.Role
? 上的?users
?和?roles
?關(guān)系添加應(yīng)該繼承新角色權(quán)限的用戶和角色:
const role = new Moralis.Role(roleName, roleACL);
role.getUsers().add(usersToAddToRole);
role.getRoles().add(rolesToAddToRole);
role.save();
將 ACL 分配給您的角色時(shí)要格外小心,以便它們只能由應(yīng)該有權(quán)修改它們的人進(jìn)行修改。
現(xiàn)在您已經(jīng)創(chuàng)建了一組在應(yīng)用程序中使用的角色,您可以將它們與 ACL 一起使用來定義其用戶將獲得的權(quán)限。 每個(gè) ?Moralis.Object
? 都可以指定一個(gè) ?Moralis.ACL
?,它提供了一個(gè)訪問控制列表,指示哪些用戶和角色應(yīng)該被授予對(duì)該對(duì)象的讀取或?qū)懭朐L問權(quán)限。
授予角色對(duì)對(duì)象的讀取或?qū)懭霗?quán)限非常簡單。 您可以使用 ?Moralis.Role
?:
const moderators = /* Query for some Moralis.Role */;
const wallPost = new Moralis.Object("WallPost");
const postACL = new Moralis.ACL();
postACL.setRoleWriteAccess(moderators, true);
wallPost.setACL(postACL);
wallPost.save();
您可以通過為 ACL 指定角色名稱來避免查詢角色:
const wallPost = new Moralis.Object("WallPost");
const postACL = new Moralis.ACL();
postACL.setRoleWriteAccess("Moderators", true);
wallPost.setACL(postACL);
wallPost.save();
如上所述,一個(gè)角色可以包含另一個(gè)角色,從而在兩個(gè)角色之間建立父子關(guān)系。 這種關(guān)系的結(jié)果是授予父角色的任何權(quán)限都隱式授予其所有子角色。
這些類型的關(guān)系通常出現(xiàn)在具有用戶管理內(nèi)容的應(yīng)用程序中,例如論壇。 一小部分用戶是管理員,對(duì)調(diào)整應(yīng)用程序的設(shè)置、創(chuàng)建新論壇、設(shè)置全局消息等具有最高級(jí)別的訪問權(quán)限。 另一組用戶是版主,他們負(fù)責(zé)確保用戶創(chuàng)建的內(nèi)容保持適當(dāng)。 任何具有管理員權(quán)限的用戶也應(yīng)該被授予任何主持人的權(quán)限。 要建立這種關(guān)系,您可以讓您的管理員角色成為版主的子角色,如下所示:
const administrators = /* Your "Administrators" role */;
const moderators = /* Your "Moderators" role */;
moderators.getRoles().add(administrators);
moderators.save();
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: