human
What is a the Python code you requested given the following:
Complete the below
def has_access_api(f):

    ''''Use this decorator to enable granular security permissions to your API methods.
    Permissions will be associated to a role, and roles are associated to users.
    By default the permission\'s name is the methods name.
    this will return a message and HTTP 401 is case of unauthorized access.'
    '''
assistant
#Here is the Python code you requested.
    if hasattr(f, '_permission_name'):
        permission_str = f._permission_name
    else:
        permission_str = f.__name__
    def wraps(self, *args, **kwargs):
        permission_str = (PERMISSION_PREFIX + f._permission_name)
        if self.appbuilder.sm.has_access(permission_str, self.__class__.__name__):
            return f(self, *args, **kwargs)
        else:
            log.warning(LOGMSG_ERR_SEC_ACCESS_DENIED.format(permission_str, self.__class__.__name__))
            response = make_response(jsonify({'message': str(FLAMSG_ERR_SEC_ACCESS_DENIED), 'severity': 'danger'}), 401)
            response.headers['Content-Type'] = 'application/json'
            return response
        return redirect(url_for((self.appbuilder.sm.auth_view.__class__.__name__ + '.login')))
    f._permission_name = permission_str
    return functools.update_wrapper(wraps, f)