Quite a late answer, but I think that
const ctx = strapi.requestContext.get()
should do the trick.
If it comes from the web there is a context, if it’s from the entityService or db.query it’s undefined ![]()
However, this does not differentiate between content manager or API.
The way I solved that problem is with the following middleware:
import { Strapi } from '@strapi/strapi'
import jwt from 'jsonwebtoken'
export default (_index, { strapi }: { strapi: Strapi }) => {
return async (ctx, next) => {
if (!ctx.request.url.startsWith('/content-manager')) {
ctx.state.isAdminUI = false
return await next()
}
if (!ctx.request.header.authorization) {
ctx.state.isAdminUI = false
return await next()
}
const token = ctx.request.header.authorization.split(' ')[1]
if (!token) {
ctx.state.isAdminUI = false
return await next()
}
const { secret } = strapi.config.get('admin.auth', {}) as any
try {
jwt.verify(ctx.request.header.authorization.split(' ')[1], secret)
ctx.state.isAdminUI = true
} catch {
ctx.state.isAdminUI = false
}
await next()
}
}
This middleware eventually checks if the authorization token of the request can be decoded with the admin auth secret.