Asp.net+;AngularJS使用Razor渲染进行授权
我想创建一个SPA网站,使用ASP.Net作为后端,Angular作为前端框架。我现在面临的问题是,如何管理用户/角色?具体来说,查看授权的最佳方法是什么(根据角色显示不同的菜单项) 我想依靠Razor来实现这一点,只是为了视图授权(使用'User.IsInRole'),这样做:Asp.net+;AngularJS使用Razor渲染进行授权,asp.net,angularjs,razor,authorization,single-page-application,Asp.net,Angularjs,Razor,Authorization,Single Page Application,我想创建一个SPA网站,使用ASP.Net作为后端,Angular作为前端框架。我现在面临的问题是,如何管理用户/角色?具体来说,查看授权的最佳方法是什么(根据角色显示不同的菜单项) 我想依靠Razor来实现这一点,只是为了视图授权(使用'User.IsInRole'),这样做: @if (Request.IsAuthenticated && User.IsInRole("Administrators")) { <div id="sidebar">
@if (Request.IsAuthenticated && User.IsInRole("Administrators"))
{
<div id="sidebar">
<div class="module">
<ul class="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
<div class="mainContent">
Hello, @User.Identity.Name !
</div>
</div>
}
@if(Request.IsAuthenticated&&User.IsInRole(“管理员”))
{
- @ActionLink(“主页”、“索引”、“主页”)
- @ActionLink(“关于”、“关于”、“主页”)
- @ActionLink(“联系人”、“联系人”、“主页”)
您好,@User.Identity.Name!
}
我知道这不是最优雅的解决方案,但最好的替代方案是什么?您可以在身份验证控制器中实现身份验证方法,并在您的js端使用此模块。请参阅下面的链接
考虑到您正在使用angular
ui路由器
或ng路由
我想说的是,利用每个状态的解析函数,如果用户登录,您可以调用服务器来获取用户
对象,根据服务器返回的响应,我们将设置authenticationSvc
服务的值
基本上,User
将在authenticationSvc
中,您可以在其中放置用户角色
示例
$routeProvider.when("/", {
templateUrl: "templates/home.html",
controller: "HomeController",
resolve: {
auth: ["$q", "authenticationSvc", function($q, authenticationSvc) {
var userInfo = authenticationSvc.getUserInfo();
if (userInfo) {
return $q.when(userInfo);
} else {
return $q.reject({ authenticated: false });
}
}]
}
});
控制器
$scope.userInfo = authenticationSvc.getUserInfo();
标记
<div id="sidebar">
<div class="module" ng-if="userInfo.roles['Administrators']">
<ul class="menu">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
<div class="mainContent">
Hello, @User.Identity.Name !
</div>
</div>
- @ActionLink(“主页”、“索引”、“主页”)
- @ActionLink(“关于”、“关于”、“主页”)
- @ActionLink(“联系人”、“联系人”、“主页”)
您好,@User.Identity.Name!
另请参阅将帮助您实施。谢谢!,虽然这个示例有助于保护路由,但我认为这更倾向于身份验证,我真正努力的是获得授权,即如何根据用户角色更改UI。耶..我个人认为这是使用授权的最佳方式..正如我为一个示例所示。您应该在解析每个路由时调用函数。@edua\u glz您在这方面取得了进展吗?我认为这更倾向于身份验证,但我正在努力获得授权,即如何根据用户角色更改UI。