C-monC opened a new issue, #21057:
URL: https://github.com/apache/superset/issues/21057

   Hi,
   
   I am trying to make a custom security manager.
   When I commit a new user using the add_user function I get the error 
   > sqlalchemy.exc.ResourceClosedError: This transaction is closed
   
   To reproduce the error either make the TokenSecurityManager class or add 
   ```
           gamma_role = self.find_role("Gamma")
           user = self.add_user(username="vadsvad",
                       email=u"[email protected]",
                       first_name="fdasdf",
                       last_name="asdfdsafd",
                       role=gamma_role)
   ```
   at line 
https://github.com/apache/superset/blob/4f1996dba8e35ee958048b726750247ec8e518aa/superset/security/manager.py#L252
   
   The SecurityMangerClass:
   ```
   class TokenSecurityManager(SupersetSecurityManager):
   
       def __init__(self, appbuilder):
           super(TokenSecurityManager, self).__init__(appbuilder)
   
       def request_loader(self, request: Request) -> Optional[User]:
           # pylint: disable=import-outside-toplevel
           from superset.extensions import feature_flag_manager
   
           gamma_role = self.find_role("Gamma")
           user = self.add_user(username="vadsvad",
                       email=u"[email protected]",
                       first_name="fdasdf",
                       last_name="asdfdsafd",
                       role=gamma_role)
           return None
   
       def add_user(
           self,
           username,
           first_name,
           last_name,
           email,
           role,
           hashed_password=""
       ):  
           """
               Generic function to create user
           """
           # try:
           user = self.user_model()
           user.first_name = first_name
           user.last_name = last_name
           user.username = username
           user.email = email
           user.active = True
           user.roles = [role]
           user.password = hashed_password
           self.get_session.add(user)
           self.get_session.commit()     <---------- error thrown on this line.
           return user
           # except Exception as e:
           #     self.get_session.rollback()
           #     return False
   ```
   I know this is more of a Flask AppBuilder issue but any assistance into 
where this transaction is being closed will be great.
   I could just create a new session engine + session as a workaround. I just 
don't understand how this doesn't work
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to