Ejemplo n.º 1
0
def update_user(user=None):
    """
    Install the user as current user of the app.

    Setup the g.current_user variable.
    Add the user to the session.
    Update Flask-Principal.

    If no user, install AnonymousIdentity
    """
    if user:
        db.session.add(user)
        db.session.commit()
        g.current_user = user

        # Tell Flask-Principal the identity changed
        identity = Identity(user.id)
        identity.user = user

        # By default we can self need
        identity.provides.add(UserNeed(user.id))

        # Add roles
        for role in user.roles:
            identity.provides.add(RoleNeed(role.name))

        identity_changed.send(current_app._get_current_object(),
                              identity=identity)
    else:
        # Tell Flask-Principal the user is anonymous
        identity_changed.send(current_app._get_current_object(),
                              identity=AnonymousIdentity())
Ejemplo n.º 2
0
    def _on_identity_loaded(self, sender, identity: Identity) -> None:
        """
        Callback that runs whenever a new identity has been loaded.
        """
        if hasattr(current_user, 'id'):
            identity.provides.add(UserNeed(current_user.id))

        for role in getattr(current_user, 'roles', []):
            identity.provides.add(RoleNeed(role.name))

        identity.user = current_user
Ejemplo n.º 3
0
def get_identity(user):
    """Create an identity for a given user instance.

    Primarily useful for testing.
    """
    identity = Identity(user.id)

    if hasattr(user, 'id'):
        identity.provides.add(UserNeed(user.id))

    for role in getattr(user, 'roles', []):
        identity.provides.add(RoleNeed(role.name))

    identity.user = user
    return identity
Ejemplo n.º 4
0
def get_identity(user):
    """Returns the identity for a given user instance.

    This is needed because we are more explicit then Flask-Principal
    and it is MUCH more convenient for tests.
    """
    if hasattr(user, 'id'):
        identity = Identity(user.id)
        identity.provides.add(UserNeed(user.id))
    else:
        return AnonymousIdentity()

    for role in getattr(user, 'roles', []):
        identity.provides.add(RoleNeed(role.name))

    identity.user = user
    return identity
Ejemplo n.º 5
0
def load_needs(sender, identity: Identity):
    identity.user = current_user

    if getattr(current_user, 'id', None):
        identity.provides.add(UserNeed(current_user.id))
        identity.provides.add(RoleNeed(USER_ROLE))