【问题标题】:Asp.net + AngularJS with Razor rendering for authorizationAsp.net + AngularJS 与 Razor 渲染授权
【发布时间】:2015-04-16 17:45:41
【问题描述】:

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

我当时正在考虑依靠 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>
}

我知道这不是最优雅的解决方案,但最好的选择是什么?

【问题讨论】:

    标签: asp.net angularjs razor authorization single-page-application


    【解决方案1】:

    您可以在您的身份验证控制器中实现身份验证方法,并在您的 Angular js 端使用此模块。请参阅下面的链接

    https://github.com/witoldsz/angular-http-auth

    这可能会有所帮助

    【讨论】:

    • 我觉得这个更面向Authentication,但是我在努力获取Authorization,也就是如何根据用户角色改变UI。
    【解决方案2】:

    考虑到您正在使用角度 ui-routerng-route

    我会说使用每个状态的解析函数,因为如果它是登录,您可以调用服务器来获取User对象,根据服务器的响应返回我们将设置@的值987654325@服务。

    基本上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>
    

    另请参阅this link 将帮助您实施。

    【讨论】:

    • 谢谢!,虽然该示例有助于如何保护路由,但我认为这更面向身份验证,我真正努力的是获得授权,即如何更改基于 UI关于用户角色。
    • ya..我个人认为这是使用授权的最佳方式..我举了一个例子。您应该在每条路线的解析上调用函数..
    • @edua_glz 你在这方面有进步吗?
    猜你喜欢
    • 2018-04-03
    • 2015-12-21
    • 1970-01-01
    • 2012-05-28
    • 2011-05-03
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多