refine service layer and access check