Improve product models
Implement ProductPermissionLogic