/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . ĠĠĊ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . auth . service . local Ċ Ċ import Ġcom . tencent . bk repo . auth . message . Auth Message Code Ċ import Ġcom . tencent . bk repo . auth . model . TR ole Ċ import Ġcom . tencent . bk repo . auth . pojo . Create Role Request Ċ import Ġcom . tencent . bk repo . auth . pojo . Role Ċ import Ġcom . tencent . bk repo . auth . pojo . enums . Role Type Ċ import Ġcom . tencent . bk repo . auth . repository . Role Repository Ċ import Ġcom . tencent . bk repo . auth . service . Role Service Ċ import Ġcom . tencent . bk repo . common . api . exception . ErrorCode Exception Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . autoconfigure . condition . Conditional On Property Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ @ Conditional On Property ( prefix Ġ= Ġ" auth ", Ġname Ġ= Ġ[" realm "], Ġhaving Value Ġ= Ġ" local ") Ċ class ĠRole ServiceImpl Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrole Repository : ĠRole Repository Ċ ) Ġ: ĠRole Service Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Role ( request : ĠCreate Role Request ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" create Ġ Ġrole Ġ Ġrequest Ġ: Ġ[$ request ] Ġ") ĊĠĠĠĠĠĠĠ Ġvar Ġrole : ĠT Role ? Ġ= Ġif Ġ( request . type Ġ== ĠRole Type . REPO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Repository . findFirst By RoleId And ProjectId And Repo Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . role Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . projectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . repo Name !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Repository . findFirst By RoleId And ProjectId ( request . role Id , Ġrequest . projectId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrole ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" create Ġrole Ġ[ ${ request . role Id } Ġ, Ġ${ request . projectId } Ġ] Ġ Ġis Ġexist .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrole . id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrole Repository . insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT Role ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrole Id Ġ= Ġrequest . role Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġrequest . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġrequest . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= Ġrequest . projectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Name Ġ= Ġrequest . repo Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadmin Ġ= Ġrequest . admin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetail ( id : ĠString ): ĠRole ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" get Ġrole Ġdetail Ġ: Ġ[$ id ] Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrole Repository . findFirst ById ( id ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtransfer ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetail ( rid : ĠString , ĠprojectId : ĠString ): ĠRole ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" get Ġ Ġrole Ġ Ġdetail Ġrid Ġ: Ġ[$ rid ] Ġ, ĠprojectId Ġ: Ġ[$ projectId ] Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrole Repository . findFirst By RoleId And ProjectId ( rid , ĠprojectId ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtransfer ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetail ( rid : ĠString , ĠprojectId : ĠString , Ġrepo Name : ĠString ): ĠRole ? Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" get Ġ Ġrole Ġ Ġdetail Ġrid Ġ: Ġ[$ rid ] Ġ, ĠprojectId Ġ: Ġ[$ projectId ], Ġrepo Name : Ġ[$ repo Name ]") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrole Repository . findFirst By RoleId And ProjectId And Repo Name ( rid , ĠprojectId , Ġrepo Name ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtransfer ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Role By Project ( type : ĠRole Type ?, ĠprojectId : ĠString ?, Ġrepo Name : ĠString ?): ĠList < Role > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" list Ġ Ġrole Ġ Ġtype Ġ: Ġ[$ type ] Ġ, ĠprojectId Ġ: Ġ[$ projectId ], Ġrepo Name : Ġ[$ repo Name ]") ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġnull Ġ&& ĠprojectId Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrole Repository . findAll (). map Ġ{ Ġtransfer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ!= Ġnull Ġ&& ĠprojectId Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrole Repository . findBy Type ( type ). map Ġ{ Ġtransfer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġnull Ġ&& ĠprojectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrole Repository . findBy ProjectId ( projectId ). map Ġ{ Ġtransfer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ!= Ġnull Ġ&& ĠprojectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrole Repository . findBy Type And ProjectId ( type , ĠprojectId ). map Ġ{ Ġtransfer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( projectId Ġ!= Ġnull Ġ&& Ġrepo Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Repository . findBy Repo Name And ProjectId ( repo Name , ĠprojectId ). map Ġ{ Ġtransfer ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Role By id ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" delete Ġ Ġrole Ġ Ġid Ġ: Ġ[$ id ]") ĊĠĠĠĠĠĠĠ Ġrole Repository . findFirst ById ( id ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" delete Ġrole Ġ[$ id Ġ] Ġnot Ġexist .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠErrorCode Exception ( Auth Message Code . AUTH _ ROLE _ NOT _ EXIST ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrole Repository . delete ById ( id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransfer ( t Role : ĠT Role ): ĠRole Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRole ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġt Role . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrole Id Ġ= Ġt Role . role Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġt Role . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġt Role . name , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= Ġt Role . projectId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadmin Ġ= Ġt Role . admin ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Role ServiceImpl :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ