Hello!
So far, everything we've discussed was not specific to angular. What follows is, so I should note that I am not an expert in angular (yet).
Since I don't know your application, let me make up an example. The app has two kinds of docs: drafts and published. A user is allowed to _see_ all published docs, but they can only edit or delete ones that belong to them. Also, docs can have reviews, but you're only allowed to see the reviews if you _own_ the doc. Lastly, users are _not_ allowed to see the drafts of others. Now let's consider four cases:
(1) a published doc, and the user owns it: angular gets the document data from the server. The server says the current user is the owner, so the view _would_ show the edit and delete buttons (using say ng-show). The view also displays the reviews below the document, because the user is the owner.
(2) a published doc, but the user doesn't own it: I would use the _same_ view and route as above. But the server will say the current user is NOT the owner, so your view hides the edit and delete buttons. Also, because the server _knew_ the user wasn't the owner, the server never sent the reviews this time because the user's not allowed to see them. So on your view, you are simply using ng-hide to hide an empty section of the page. Again, the server didn't send it because he doesn't own it, so there's nothing to see, so we hide the empty elements.
(3) a draft doc the user owns. Again, same view. Same as (1).
(4) a draft doc the user doesn't own: Uh oh, not authorized. This time, when angular gets the data from the server, the server _knows_ this user isn't allowed to see it, so the server will _not_ return the draft. The server will just say "not authorized" or "403" or whatever. Now angular gets this response and you can handle it in multiple ways. More on this in a second.
(5) a non-existent post: angular queries the server, which says it doesn't exist. 404 not found. More on this in a second.
The bottom line is this: authorization happens _entirely_ on the server. We are using angular to present the view slightly differently based on what the _server_ said the user could see. No data a user can't see was ever sent to angular because that would be a massive security flaw.
Okay, now for (4) and (5) to which I said I would return: you are saying that you want to redirect the user to a different route, prior to the view ever running as there's nothing for the user to see (it didn't exist or they're not allowed). In essence, your app says, "sorry, you're not allowed to see that, so let me redirect you someplace else". Since this is a single-page app, there really needn't be separate 404 or 403 views in most cases. It may be sufficient to simply say "Sorry, that doesn't exist" in an Bootstrap-like alert or a modal or whatever, because the route never changed. But you can handle it any way you want, in the same way:
The $routeProvider actually as a `resolve` property that you can use in combination with a promise. Here is some information on how you can use that in a situation like yours. These are based more on a 404, but the code essentially is the same for 403.
http://stackoverflow.com/questions/11972026/delaying-angularjs-route-change-until-model-loaded-to-prevent-flicker