基於角色與基於資源的權限訪問控制


  基於角色的權限訪問控制RBAC(role-based access control)是以角色為中心進行的訪問控制,也就是判斷主體subject是那個角色的方式進行權限訪問控制,是粗粒度的

  基於資源的權限訪問控制RBAC(resource-based access control)是以資源為中心進行的訪問控制,只需要為角色添加權限就可以

 

  區別:

    由於基於角色的權限訪問控制的角色與權限往往是多對多的關系(比如admin角色可以所有CURD的權限,部門經理角色有Retrieve權限,這就是多對多關系了),如果角色所對應的權限發生變化 ,那我們所編寫的判斷邏輯就必須發生改變,可擴展性差

      比如:原本只有admin可以訪問,那么判斷可以這么寫

      if(role.equals(”admin”)){

        //retrieve

      }

      但是假設后期需要給部門經理角色也賦予retrieve權限,那么必須改變原有代碼,或者另外增加代碼,總之要改變原有的判斷邏輯

      if(role.equals("admin") || role.equals("manager")){

        //retrieve    

      }

    如果是基於資源的權限訪問控制,資源和權限一對一關系比較常見,很多時候資源和權限在數據庫中會被合並在一張表中,只需要為資源分配相應的權限。所以一個具體操作對應的權限,只要直接判斷用戶是否擁有該權限即可,可擴展性強

      //判斷用戶是否具有查看權限,用戶的角色可以任意變化,而這條判斷語句始終是可行的

      if(user.hasPermission("retrieve")){

        //retrieve 

      }

      如果用戶的權限需要改變,只需要對數據庫中用戶的角色對應的權限進行改變,而權限與對應資源通常不會有改變的需求

 

  不過使用基於資源的方式,仍然是需要角色的,用戶的權限分配的依據往往是角色(比如:如果我給你admin角色,那么同時也會給你curd的權限)。而進行訪問控制時,則不依賴角色(比如:你想查看 ,那么我可以直接問你你有retrieve權限嗎?如果有,你就可以訪問。而不關心你是什么角色)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM