EDIT: I am not worried about being called in the wrong order since this is enforced through using multiple interfaces, I am just worried about the terminal method getting called
You could write a rule for PMD or Findbugs if you really want to enforce it in the code. This would have the advantage that it is already available at compile time.
Runtime: If you only want to make sure the users call your builder in the correct order then use separate interfaces for each step.
grantUser() will return ISetPermission which has the method permissionTo(), which will return an IResourceSetter which has the method item()...
You can add all those interfaces to one builder, just make sure that the methods return the correct interface for the next step.