AngularJS SPA Riderect un authorized routes
created by ozkary.com
by ozkary
HTML
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.12.0/ui-bootstrap-tpls.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-route.min.js"></script>
<script src="https://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
<div ng-app="app">
<div id="container" >
<div id="page-wrapper">
<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#app-menu">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Route Claims Authorization by ozkary.com</a>
</div>
<div class="collapsed navbar-collapse" id="app-menu">
<ul class="nav navbar-nav" >
<li clas='active'><a href="#/"><i class="fa fa-home"></i> Home</a></li>
<li><a href="#/claims"><i class="fa fa-key"></i> Claims</a></li>
</ul>
</div>
</nav>
<section class="container">
<ng-view />
</section>
</div>
<!-- /#page-wrapper...
CSS
.form-signin
{
max-width: 330px;
padding: 15px;
margin: 0 auto;
}
.form-signin .form-signin-heading, .form-signin .checkbox
{
margin-bottom: 10px;
}
.form-signin .checkbox
{
font-weight: normal;
}
.form-signin .form-control
{
position: relative;
font-size: 16px;
height: auto;
padding: 10px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.form-signin .form-control:focus
{
z-index: 2;
}
.form-signin input[type="text"]
{
margin-bottom: -1px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.form-signin input[type="password"]
{
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
JavaScript
(function() {
'use strict';
var appRoutes = [{
title: "Login",
url: "/",
templateUrl: "views/main.html",
controller:null,
controllerAs: null,
requiredAuth: false
},
{
title: "Claims", //todo-auth add claims module
url: "/claims",
templateUrl: "views/claims.html",
controller: "app.ctrl.claims",
controllerAs: "ctrl",
redirectTo: '/noaccess',
claims: "app.claims",
requiredAuth: true
},
{
title: "No Access",
url: "/noaccess",
templateUrl: "views/noaccess.html",
controller: null,
controllerAs: null,
requiredAuth: false
}];
var app = angular.module('app', ['ngRoute']);
app.constant('$appRoutes', appRoutes)
app.config(['$routeProvider', '$appRoutes', appConfig]);
app.run(['$rootScope', '$location', runApp]);
app.factory('app.svc.auth', [svcAuth]);
app.controller('app.ctrl.claims', ['app.svc.auth','$scope', ctrlClaims]);
function appConfig($routeProvider, $appRoutes) {
$appRoutes.forEach(function (route) {
configRoute(route);
function configRoute(route) {
$routeProvider
.when(route.url, {
templateUrl: route.templateUrl,
controller: route.controller,
controllerAs: route.controllerAs,
resolve: { //todo-auth secure routes
"hasClaim": ["app.svc.auth", "$route", function ($svcAuth, $route) {
var result = false;
...