func (r *requestAttributeGetter) GetAttribs(req *http.Request) authorizer.Attributes {
	attribs := authorizer.AttributesRecord{}

	ctx, ok := r.requestContextMapper.Get(req)
	if ok {
		user, ok := api.UserFrom(ctx)
		if ok {
			attribs.User = user
		}
	}

	apiRequestInfo, _ := r.apiRequestInfoResolver.GetAPIRequestInfo(req)
	attribs.Verb = apiRequestInfo.Verb

	// Check whether meaningful api information can be resolved for the current path
	if isAPIResourceRequest(r.apiRequestInfoResolver.APIPrefixes, req) {
		attribs.APIGroup = apiRequestInfo.APIGroup

		// If a path follows the conventions of the REST object store, then
		// we can extract the resource.  Otherwise, not.
		attribs.Resource = apiRequestInfo.Resource

		// If the request specifies a namespace, then the namespace is filled in.
		// Assumes there is no empty string namespace.  Unspecified results
		// in empty (does not understand defaulting rules.)
		attribs.Namespace = apiRequestInfo.Namespace
	} else {
		// If a request does not fall into an api namespace/resource pattern, it's a special path.
		attribs.NonResourcePath = req.URL.Path
	}

	return &attribs
}