2017-09-27 94 views
0

我們有一個基於動態對象的系統 - 所以有一個描述這些對象的元數據表。例如 - 組織A可以有一個倉庫對象,一個客戶對象和一個銷售對象。組織B可以有一個銷售對象和一個小丑對象。oData,Yii2和動態對象

用戶驗證我們在Yii2框架上構建的其餘api。他們使用/ user/authenticate調用進行身份驗證,然後他們使用/ object/for list/create和/ object //爲Read,Update,Delete查詢對象。

問題是:如果開發人員要集成到服務中,他們需要知道組織中已定義的所有對象,包括他們可以讀取/寫入的可用字段。我們想要做的是提供一個選項來描述我們的數據。

E.g.我最初的想法是公開像/ object/metadata這樣的東西,在這些東西中,我會用允許用戶訪問的json資源列表進行響應,例如倉庫用戶將看到倉庫,客戶,銷售。組織B用戶可以看到Sales,Clown。

我被要求看看oData作爲這個規範,但oData似乎定義了一個事物(url,搜索和過濾等)的整體約定。

是否有意義實施部分oData規範或將其用作指南並保持我們的URL相同? 是否有oData規範的一部分可用於描述動態資源(例如,如果用戶使用我們的系統向Sales對象添加列 - api應反映該列)。

希望瞭解如何設計/處理此需求的任何想法。

謝謝!

回答

0

我創建後續溶液:

  • 延伸dektrium/yii2-RBAC,在那裏assigments添加列公司
  • 每個模塊中(werhause,發票,..)創建的角色對象
  • 角色對象具有方法:canAssign(),canView(),canRemove()用於用戶administartion
  • 用戶管理面板從所有模塊收集所有角色(按文件掃描)並顯示按模塊分組。

該解決方案允許用戶公司之間,爲用戶切換分配不同的訪問權限,不同的公司和控制用戶管理權限分配權限enter image description here

+0

我們已經實施了RBAC系統。問題在於使用oData規範來描述REST api –

+1

對於實體使用odata.editLink和odata.readLink。如果沒有定義odata.editLink - 實體不能編輯。 對於字段添加自己的odata.editablefileds。 – uldis

+0

我們已經決定推出我們自己的描述符 - 是否記錄了odata.editablefields? –