@@ -43,6 +43,12 @@ class OAuth2ConfigEntity(Model):
4343 nullable = True ,
4444 comment = "Admin users list (JSON array)" ,
4545 )
46+ default_role = Column (
47+ String (32 ),
48+ nullable = True ,
49+ default = "viewer" ,
50+ comment = "Default RBAC role for new OAuth2 users" ,
51+ )
4652 gmt_create = Column (DateTime , nullable = True )
4753 gmt_modify = Column (DateTime , nullable = True )
4854
@@ -54,6 +60,7 @@ def to_dict(self) -> Dict[str, Any]:
5460 "enabled" : bool (self .enabled ),
5561 "providers_json" : self .providers_json ,
5662 "admin_users_json" : self .admin_users_json ,
63+ "default_role" : self .default_role or "viewer" ,
5764 }
5865
5966
@@ -115,6 +122,7 @@ def save_or_update(
115122 enabled : bool ,
116123 providers : List [Dict [str , Any ]],
117124 admin_users : List [str ],
125+ default_role : str = "viewer" ,
118126 config_key : str = "global" ,
119127 ) -> OAuth2ConfigEntity :
120128 """Save or update OAuth2 config (stored in plain text, mask on display)."""
@@ -143,13 +151,15 @@ def save_or_update(
143151 entity .enabled = 1 if enabled else 0
144152 entity .providers_json = providers_json
145153 entity .admin_users_json = admin_users_json
154+ entity .default_role = default_role
146155 entity .gmt_modify = datetime .utcnow ()
147156 else :
148157 entity = OAuth2ConfigEntity (
149158 config_key = config_key ,
150159 enabled = 1 if enabled else 0 ,
151160 providers_json = providers_json ,
152161 admin_users_json = admin_users_json ,
162+ default_role = default_role ,
153163 gmt_create = datetime .utcnow (),
154164 gmt_modify = datetime .utcnow (),
155165 )
@@ -203,6 +213,7 @@ def get_config(
203213 enabled = bool (entity .enabled )
204214 admin_users_json = entity .admin_users_json or "[]"
205215 providers_json = entity .providers_json or "[]"
216+ default_role = entity .default_role or "viewer"
206217
207218 try :
208219 admin_users = json .loads (admin_users_json ) if admin_users_json else []
@@ -222,6 +233,7 @@ def get_config(
222233 "enabled" : enabled ,
223234 "providers" : providers ,
224235 "admin_users" : admin_users ,
236+ "default_role" : default_role ,
225237 }
226238
227239 def get_config_with_secrets (
@@ -252,15 +264,21 @@ def load_with_secrets(self) -> Optional[Dict[str, Any]]:
252264 return self .dao .get_config_with_secrets ("global" )
253265
254266 def save (
255- self , enabled : bool , providers : List [Dict ], admin_users : List [str ]
267+ self ,
268+ enabled : bool ,
269+ providers : List [Dict ],
270+ admin_users : List [str ],
271+ default_role : str = "viewer" ,
256272 ) -> bool :
257273 """Save OAuth2 config to database."""
258274 try :
259- self .dao .save_or_update (enabled , providers , admin_users , "global" )
275+ self .dao .save_or_update (
276+ enabled , providers , admin_users , default_role , "global"
277+ )
260278 return True
261279 except Exception as e :
262280 logger .exception (f"Failed to save OAuth2 config: { e } " )
263- return False
281+ raise # Re-raise to let caller handle the error
264282
265283
266284# Singleton instance
0 commit comments