The solution looks OK to me.
Scope is not an option here because the search language enables expressions like: "admin or name=amos", scopes can only work as 'and' condition as in is_admin.name_is("amos")
scoped search 'natural' language can only define expressions like "admin or usergroup.admin"