Asp.net+;AngularJS使用Razor渲染进行授权

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">

我想创建一个SPA网站,使用ASP.Net作为后端,Angular作为前端框架。我现在面临的问题是,如何管理用户/角色?具体来说,查看授权的最佳方法是什么(根据角色显示不同的菜单项)

我想依靠Razor来实现这一点,只是为了视图授权(使用'User.IsInRole'),这样做:

@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。