我正在处理找到here的LoopBack文档。我没有按照文档来构建所涵盖的应用程序,而是将这些概念应用于我自己的应用程序。
我有以下型号:
SuperUser
=>扩展了内置的User
模型Profile
=>扩展了内置的User
模型Account
=>一个LoopBack PersistedModel
Transaction
=>一个我不希望经过身份验证的实例Profile
能够访问端点Profile GET /Profiles
。我不希望Profile
能够访问有关所有Profile
的信息。所以,我提出了SuperUser
,它应该能够通过实现Profile GET /Profiles
来访问端点Role
。
这是我到目前为止所做的:
创建SuperUser
的功能和Role
name
admin
的功能。然后将该角色分配给创建的SuperUser
。
function createSuperUser(){
SuperUser.create([
{email: "reubs@reubs.com", username:"reubs", password: 'password'}
], function(err, users) {
if (err) throw err;
console.log('Created user:', users);
//create the admin role
Role.create({
name: 'admin'
}, function(err, role) {
if (err) throw err;
console.log('Created role:', role);
role.principals.create({
principalType: RoleMapping.USER,
principalId: users[0].id
}, function(err, principal) {
if (err) throw err;
console.log('Created principal:', principal);
});
});
});
}
我的profile.json
$owner
中使用动态角色acls
来尝试确保Profile
只能获得它拥有的内容。还不是admin
中包含acls
规则。
{
"name": "Profile",
"base": "User",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {},
"validations": [],
"relations": {
"accounts": {
"type": "hasMany",
"model": "Account",
"foreignKey": "profileId"
}
},
"acls": [
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW",
"property": "find"
}
],
"methods": {}
}
此设置允许经过身份验证的Profile
访问端点Profile GET /Profiles
我只希望SuperUser
能够真正完全控制Projects
API端点。即SuperUser
应该能够获得所有Profiles
等等。
提前致谢, Reubs
答案 0 :(得分:0)
在您的Profile.js文件中,您应该实现一些方法,该方法接受尝试发出请求的当前/源配置文件ID(您可以从当前上下文获取)。比较请求的配置文件ID和当前配置文件ID。如果匹配,则发回数据。
请务必在json中添加验证方法的名称。例如:"property": "[find, yourProfileValidationMethod]"
。此外,您可以在json中添加"model": "Profile"
属性,以使此规则特定于此模型。
我希望这可以回答你的大部分问题。如果您需要更多帮助,请告诉我。