RGW ACL主要類關係圖以下圖所示:ui
RGW ACL處理類關係圖以下圖所示:xml
RGW ACL主要處理流程詳細說明以下。對象
1、PUT ACL。get
RGWPutACL::execute()object
|__從HTTP請求數據流中解析出RGWAccessControlPolicy_S3對象List
|__RGWAccessControlPolicy_S3::rebuild()遍歷
|__rgw_get_user_info_by_uid() 獲得指定的用戶信息meta
|__建立ACLOwner對象且設置ACLOwner的id和namemap
|__遍歷grant_map列表生成新的ACLGrant對象請求
|__將新生成的ACLGrant對象插入到RGWAccessControlList::grant_map中
|__根據bucket和object信息生成rgw_obj對象
|__對於設置對象的ACL則將對象的ACL信息寫入到對象屬性的RGW_ATTR_ACL中,對於設置bucket的ACL則將ACL信息寫入到Bucket的metadata中
2、GET ACL。
RGWGetACLs::execute()
|__判斷所需是bucket ACL仍是object ACL
|__生成RGWAccessControlPolicy_S3對象
|__RGWAccessControlPolicy_S3::to_xml() 將RGWAccessControlPolicy_S3對象xml化