Use admin class function to check permissions.

This allows the ProductChildAdminBase sub-classes to override the `has_*_permission` methods. I'm not sure if the specific solution is the best approach but I do think using `has_*_permission` methods in some way is better than using `user.has_perm` directly.
Instead of instantiating a new model admin, I'd recommend using the `_get_real_admin_by_model()` function. Other then that, I fully agree on using the `ModelAdmin.has_...permission()` function instead of circumventing it with `user.has_perm()`.