2017-03-07 40 views
1

我一直在閱讀文檔,但我似乎無法做到正確。如何在FeathersJS中構造條件鉤子?

我想通過包裝一些提供的鉤子來實現自定義條件鉤子。它應該限制訪問服務(該方法並不重要)是:

1)首先檢查用戶是否使用具有adminsuper-admin角色:

auth.restrictToRoles({ 
    roles: ['admin', 'super-admin'] 
}), 

如果用戶有需要的角色,掛鉤應該允許訪問。否則..

2)使用限制訪問業主:

auth.restrictToOwner({ ownerField: 'id' }), 

我想不通的是如何獲取和檢查auth.restrictToRoles結果,所以如果需要,我可以運行auth.restrictToOwner

任何幫助將不勝感激!

回答

2

有兩種選擇。更容易的是不使用預先構建的鉤子。幾乎每個預先構建的鉤子都可以通過幾行代碼自行實現。它看起來是這樣的:

app.service('myservice').before({ 
    find(hook) { 
    const { user } = hook.params; 
    const {roles } = user; 

    if(roles.indexOf('admin') !== -1 && roles.indexOf('super-admin') !== -1) { 
     hook.params.query.userId = user._id; 
    } 
    } 
}); 

另一種方法是創建一個包裝掛鉤,首先調用restrictToRoles然後catches任何錯誤(請注意,它不是完全實現它自己的基本上更多的代碼):

const restrictToRoles = auth.restrictToRoles({ 
    roles: ['admin', 'super-admin'] 
}); 
const restrictToOwner = auth.restrictToOwner({ ownerField: 'id' }); 

app.service('myservice').before({ 
    find(hook) { 
    return restrictToRoles(hook).catch(() => restrictToOwner(hook)); 
    } 
}); 
+0

太棒了,謝謝。我最終選擇了兩種組合,並且運行良好。 – forgot