Android存取控制之基於角色 RBAC存取控制邏輯設計

來源:互聯網
上載者:User

Android系統用於許可權檢查的函數較多,“PackageManagerService.java”中的“checkUidPermission”是其中底層的許可權檢查函數。“checkUidPermission”函數首先根據進程的“uid”找到相應的已經被獲批准的許可權集“GrantedPermission”,然後判斷此時請求的許可權名“permName”是否在“GrantedPermission”中。正如所示,本課題設計了函數“Permset”,它將許可權表和使用者表進行聯集查詢,根據“uid”返回對應的許可權集“permset”,然後RBAC判斷請求的許可權名permName是否在“permset”中,若不在,則返回錯誤碼。

1. 關鍵方法設計

當手機使用者通過安全性原則工具定製了安全性原則後,permTorole和uidTorole這兩張表也就形成了,現在需要知道給定一個uid,那麼使用者批准給它的許可權集是什嗎?為此設計了如下方法:

/ *

     * return permissions set associated withuid

     * @uid: the uid of App

     * */

    public HashSet<String>PermissionsSet(Stringuid);

此方法使用operation對象聯集查詢許可權表和使用者表,根據uid尋找相關的許可權,並返回HashSet<String>型的變數。由於HashSet採用紅/黑樹狀結構作為儲存結構,因此尋找效率較高,那麼這樣的設計會減少RBAC控制邏輯決策的時間開銷。

2. 修改checkUidPermission

為了實現RBAC存取控制,必須修改checkUidPermission方法,首先,根據參數uid找到其相關的許可權集,如下:

if(RbacDebug.rbac== true) {

       permset =PermissionsSet(String.valueOf(uid));

}

接著,在Android已經批准了該許可權後,添加RBAC控制碼,如下:

if(RbacDebug.rbac== true) {  

       if(permset.isEmpty() == true ||permset.contains(permName) == true) {

          return PackageManager.PERMISSION_GRANTED;

    }

       else {

          return PackageManager.PERMISSION_DENIED;

   }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.