2015-08-11 3 views
3

Я читал документы о петлевых письмах о ролях. Они заявляют следующее:

Чтобы претендовать на $ владельца, целевая модель должна иметь belongsTo отношения к модели пользователя (или модель распространяется от пользователя) и свойство соответствия внешнего ключа целевой модели пример. Проверка владельца $ выполняется только для удаленного метода, который имеет: id на пути , например GET/api/users /: id.

Однако то, что происходит, когда у меня есть «hasMany» отношение и хотите выполнить действие какого-либо объекта, как это:

PUT myusers/123/news/456 

Это будет мой user.json:

{ 
    "name": "MyUser", 
    "plural": "myusers", 
    "base": "User", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": {}, 
    "validations": [], 
    "relations": { 
    "news": { 
     "type": "hasMany", 
     "model": "News", 
     "foreignKey": "" 
    } 
    }, 
    "acls": [], 
    "methods": [] 
} 

ответ

4

На основании this, this и this. Я изменил объект MyUser на объект Writer, потому что мне это нравится.

Как Writer предприятие имеет много News, то News отношение и ACL должно быть что-то вроде этого (news.json).

"relations": { 
    "writer": { 
    "type":"belongsTo", 
    "model":"Writer", 
    "foreignKey":"writer_id" 
    } 
}, 
"acls": [ 
    { // Nobody has access to nothing 
    "accessType": "*", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "DENY" 
    }, 
    { // But everyone can read everything 
    "accessType": "READ", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW" 
    }, 
    { // And authenticated users can create news 
    "accessType": "EXECUTE", 
    "principalType": "ROLE", 
    "principalId": "$authenticated", 
    "permission": "ALLOW", 
    "property": "create" 
    }, 
    { // And the owner of a news can update it 
    "accessType": "WRITE", 
    "principalType": "ROLE", 
    "principalId": "$owner", 
    "permission": "ALLOW" 
    } 
], 

И Writer сущность имеет те же ACL правила, но это отношения (writer.json)

"relations": { 
    "news": { 
    "type": "hasMany", 
    "model": "News", 
    "foreignKey": "writer_id" 
    } 
} 

Что происходит на самом деле является то, что, когда вы создаете Writer, необходимо указать email и password потому что он унаследовал от User модель. Так что если вы хотите, чтобы выполнить

PUT writers/123/news/456 

Вы должны быть авторизованы имеет Writer, который можно сделать в этой конечной точке: /api/writers/loginemail+password). Эта конечная точка будет давать вам токен Writer, а затем вы сможете выполнить обновление на News, если у вас есть токен на заголовке, URL-адресе или форме.

С другой стороны, вы также можете получить пользователя, который делает HTTP Request, и положите, что у него есть владелец новостей с hook.

Надеюсь, это поможет. С уважением.

Смежные вопросы