/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠF U JIT SU ĠCLO UD ĠTE CH NO LOG IES ĠLIMITED ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . n if cloud . mb a as . core Ċ Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ Ċ /** Ċ Ġ* ĠAccess ĠControl Ġ( ACL ) Ġfeature Ġclass . Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġis Ġdo Ġfeatures Ġon Ġsettings ĠAccess ĠControl Ġof Ġdata Ġfor ĠN CM B ĠKotlin ĠSDK . Ċ Ġ* Ċ Ġ*/ Ċ class ĠN CM BA cl Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠACL Ġfor Ġuser / public ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġuser Acl : ĠMutable Map < String , ĠPermission > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠACL Ġfor Ġrole ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġrole Acl : ĠMutable Map < String , ĠPermission > ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġpublic ĠACL Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACL _ PUBLIC Ġ= Ġ"*" ĊĊĠĠĠĠĠĠĠ Ġ/** Ġprefix Ġof Ġrole Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPREFIX _ ROLE Ġ= Ġ" role :" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġwith Ġclass Ġname ĊĠĠĠĠ Ġ* Ġ@ param ĠclassName Ġclass Ġname Ġfor Ġdata Ġstore ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Acl Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġrole Acl Ġ= ĠHashMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġfor ĠN CM BA cl Ġfrom ĠJSON ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġjson Ġjson Ġobject Ġof Ġdef al ut Ġacl ĊĠĠĠĠ Ġ* Ġ@ throws ĠJSON Exception Ġexception Ġfrom ĠJSONObject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( json : ĠJSONObject ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġparse ( json ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInner Ġclass Ġof Ġrepresentation Ġfor Ġpermission ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠPermission Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġaccess Ġpermitted Ġto Ġread Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġreadable : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġ/** Ġaccess Ġpermitted Ġto Ġwrite Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġwritable : ĠBoolean ĊĊĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructor ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconstructor (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġreadable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġwritable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġread Ġread Ġpermission ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwrite Ġwrite Ġpermission ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconstructor ( read : ĠBoolean , Ġwrite : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġaccess Ġpermitted Ġto Ġread Ġand Ġwrite Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreadable Ġ= Ġread ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwritable Ġ= Ġwrite ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstruct Ġfor ĠN CM BA cl Ġfrom ĠJSON ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconstructor ( json : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreadable Ġ= Ġjson . opt Boolean (" read ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwritable Ġ= Ġjson . opt Boolean (" write ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRepresent Ġto ĠJSON Ġobject ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠJSONObject ĠJSON Ġrepresentation ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( JSONException :: class ) ĊĠĠĠĠĠĠĠ Ġfun ĠtoJson (): ĠJSONObject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( readable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put (" read ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( writable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put (" write ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġjson ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRepresent Ġto Ġstring ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠString Ġstring Ġrepresentation ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠtoJson (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġparse Ġjson Ġfrom ĠJSONObject ĊĠĠĠĠ Ġ* Ġ@ param Ġinput Ġinput ĠJSONObject ĊĠĠĠĠ Ġ* Ġ@ throws ĠJSON Exception Ġexception Ġfrom ĠJSONObject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( JSONException :: class ) ĊĠĠĠ Ġfun Ġparse ( input : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġinput . keys ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġinput . getJSONObject ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Ġ= ĠPermission ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Role Name ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrole Name Ġ= Ġrole Name From Id ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Acl [ role Name ] Ġ= Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Acl [ id ] Ġ= Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Role Name ( id : ĠString ): Boolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġid . startsWith ( PREFIX _ ROLE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġrole Name From Id ( id : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrole Name Ġ= Ġid . substring ( PREFIX _ ROLE . length ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrole Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġto ĠJSONObject ĊĠĠĠĠ Ġ* Ġ@ return Ġconverted Ġvalue ĊĠĠĠĠ Ġ* Ġ@ throws ĠJSON Exception Ġexception Ġfrom ĠJSON Exception ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( JSONException :: class ) ĊĠĠĠ Ġfun ĠtoJson (): ĠJSONObject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( user Key , Ġvalue ) Ġin Ġuser Acl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( user Key , Ġvalue . toJson ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġrole Acl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrole Key Ġ= Ġadd Role Key ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( role Key , Ġvalue . toJson ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Role Key ( key : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrole Key Ġ= ĠPREFIX _ ROLE Ġ+ Ġkey ĊĠĠĠĠĠĠĠ Ġreturn Ġrole Key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck ĠACL Ġis Ġempty Ġor Ġnot ĊĠĠĠĠ Ġ* Ġ@ return Ġreturn Ġtrue Ġwhen Ġacl Ġis Ġempty ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠisEmpty : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġuser Acl . isEmpty () Ġ&& Ġrole Acl . isEmpty () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġuser Ġaccess Ġpermissions ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ return Ġpermissions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser Access ( userId : ĠString ): ĠPermission Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpermission Ġ= Ġuser Acl [ userId ] ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Ġ= ĠPermission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġset Ġpermission Ġto ĠACL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpermission ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Ġuser Ġaccess Ġpermissions ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ param Ġpermission Ġpermission ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUser Access ( userId : ĠString , Ġpermission : ĠPermission ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Acl [ userId ] Ġ= Ġpermission ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġrole Ġaccess Ġpermissions ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ return Ġpermissions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Role Access ( role Name : ĠString ): ĠPermission Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpermission Ġ= Ġrole Acl [ role Name ] ĊĠĠĠĠĠĠĠ Ġif Ġ( permission Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Ġ= ĠPermission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġset Ġpermission Ġto ĠACL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpermission ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Ġrole Ġaccess Ġpermissions ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġpermission Ġpermission ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Role Access ( role Name : ĠString , Ġpermission : ĠPermission ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrole Acl [ role Name ] Ġ= Ġpermission ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġpermission Ġfor Ġuser ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ return Ġsuccess Ġto Ġremove Ġpermission ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove User Permission ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( user Acl . containsKey ( userId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Acl . remove ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġper mis son Ġfor Ġrole ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ return Ġsuccess Ġto Ġremove Ġpermission ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Role Permission ( role Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( role Acl . containsKey ( role Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Acl . remove ( role Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġreadable / writable Ġshortcut Ġmethods ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġgiven Ġuser Ġid Ġis Ġallowed Ġto Ġread ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser Read Access ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetUser Access ( userId ). readable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġgiven Ġuser Ġid Ġis Ġallowed Ġto Ġread . ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUser Read Access ( userId : ĠString , Ġallowed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠgetUser Access ( userId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( p . readable Ġ== Ġallowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalready Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Permission Ġ= ĠPermission ( allowed , Ġp . writable ) ĊĠĠĠĠĠĠĠ ĠsetUser Access ( userId , Ġnew Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġgiven Ġuser Ġid Ġis Ġallowed Ġto Ġwrite ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetUser Write Access ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetUser Access ( userId ). writable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġgiven Ġuser Ġis Ġallowed Ġto Ġwrite . ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġuser Ġid ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetUser Write Access ( userId : ĠString , Ġallowed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠgetUser Access ( userId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( p . writable Ġ== Ġallowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalready Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Permission Ġ= ĠPermission ( p . readable , Ġallowed ) ĊĠĠĠĠĠĠĠ ĠsetUser Access ( userId , Ġnew Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġge vin Ġrole Ġname Ġis Ġallowed Ġto Ġread ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Role Read Access ( role Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Role Access ( role Name ). readable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġgiven Ġrole Ġis Ġallowed Ġto Ġread . ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Role Read Access ( role Name : ĠString , Ġallowed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġget Role Access ( role Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( p . readable Ġ== Ġallowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalready Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Permission Ġ= ĠPermission ( allowed , Ġp . writable ) ĊĠĠĠĠĠĠĠ Ġset Role Access ( role Name , Ġnew Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġge vin Ġrole Ġname Ġis Ġallowed Ġto Ġwrite ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Role Write Access ( role Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Role Access ( role Name ). writable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġgiven Ġrole Ġis Ġallowed Ġto Ġwrite . ĊĠĠĠĠ Ġ* Ġ@ param Ġrole Name Ġrole Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Role Write Access ( role Name : ĠString , Ġallowed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġget Role Access ( role Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( p . writable Ġ== Ġallowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġalready Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Permission Ġ= ĠPermission ( p . readable , Ġallowed ) ĊĠĠĠĠĠĠĠ Ġset Role Access ( role Name , Ġnew Permission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġpublic ĠACL Ġshortcuts ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġpublic Ġis Ġallowed Ġto Ġread . ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġpublic Ġis Ġallowed Ġto Ġread . ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġread Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpublic Read Access : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠgetUser Read Access ( ACL _ PUBLIC ) ĊĠĠĠĠĠĠĠ Ġset ( allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Read Access ( ACL _ PUBLIC , Ġallowed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġwhether Ġthe Ġpublic Ġis Ġallowed Ġto Ġwrite . ĊĠĠĠĠ Ġ* Ġ@ return Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġwhether Ġthe Ġpublic Ġis Ġallowed Ġto Ġwrite . ĊĠĠĠĠ Ġ* Ġ@ param Ġallowed Ġcan Ġwrite Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpublic Write Access : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠgetUser Write Access ( ACL _ PUBLIC ) ĊĠĠĠĠĠĠĠ Ġset ( allowed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Write Access ( ACL _ PUBLIC , Ġallowed ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ