2017-05-07 63 views
0

在我的新項目中,我需要一個REST服務,該服務將包含系統的所有邏輯和數據。現在我們需要一個網站和一個桌面應用程序來使用這個服務,並且以後可以添加更多。我應該如何確定在我的ASP MVC項目上顯示哪些菜單項需要使用ASP API

網站,桌面應用程序和其他應該只是服務的「接口」。

該項目將包含一些可以執行某些操作的角色。

我的問題: 我應該如何確定哪些菜單項應該對登錄用戶可見? 在我的網站(ASP.NET MVC)中,我可以登錄並且該服務爲我提供了一個令牌,可以用來嘗試訪問資源。 但試圖訪問資源將只告訴我,如果我可以在請求(200或403)後訪問它。 那麼,如何防止用戶看到他們無法訪問的菜單項呢?

+0

你能不能得到休息服務的菜單項? – User3250

+0

我不認爲RESTservice應該知道菜單項。我想根據登錄用戶的訪問權限來顯示他們。但我不確定是否應該從RESTservice查詢/存儲這些權限,或者是否有其他方式來執行此操作。 –

+0

我有同樣的情況。我在我的數據庫中保存訪問權限和資源URL(控制器和操作名稱),並在加載主頁上由js生成菜單。 – User3250

回答

1

我沒有明白你的觀點。 但是這可能是有益的
Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2

編輯1 我有三種用戶學生和教師和管理員是這種身份登錄行動

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 

      ApplicationUser signedUser = UserManager.FindByEmail(model.Email); 
      var result = await SignInManager.PasswordSignInAsync(signedUser.UserName, model.Password, model.RememberMe, shouldLockout: true); 

      switch (result) 
      { 
       case SignInStatus.Success: 
        if (signedUser.UserAccessType == "Student") 
        { 
         var ObjStudent = dbContext.Students.Find(signedUser.Id);     
         TempData["Student"] = ObjStudent; 

        } 
        else if (signedUser.UserAccessType == "Instructor") 
        { 
         var ObjInstructor = dbContext.Instructors.Find(signedUser.Id); 
         TempData["Instructor"] = ObjInstructor; 
        } 
        else if (signedUser.UserAccessType == "Admin") 
        { 
         var ObjAdmin = dbContext.Users.Find(signedUser.Id); 
         TempData["Admin"] = ObjAdmin; 
        } 
        return RedirectToLocal(returnUrl); 
       case SignInStatus.LockedOut: 
        return View("Lockout"); 
       case SignInStatus.RequiresVerification: 
        return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
       case SignInStatus.Failure: 
       default: 
        ModelState.AddModelError("", "Invalid login attempt."); 
        return View(model); 
      } 
     } 

然後在佈局:

@using AdminstrationSysytem_v1.Models 
@{ 
    var Student = TempData["Student"] as Student; 
    var Instructor = TempData["Instructor"] as Instructors; 
    var Admin = TempData["Admin"] as ApplicationUser; 
    TempData.Keep(); 
} 

基於用戶類型的菜單項:

<div class="navbar-collapse collapse"> 
     <ul class="nav navbar-nav"> 
      <li><a href="https://github.com/AlameerAshraf">About</a></li> 
      @if (TempData.Count != 0) 
      { 
       if (TempData.ContainsKey("Student")) 
       { 
        <li>@Html.ActionLink("Student Profile", "UserProfile", "Students", Student)</li> 
        <li>@Html.ActionLink("Evalute Instructors", "Evalute", "Students", Student)</li> 
       } 
       else if (TempData.ContainsKey("Instructor")) 
       { 
        <li>@Html.ActionLink("Instructor Profile", "UserProfile", "Instructors", Instructor)</li> 
        <li>@Html.ActionLink("Permissions", "GivePermission", "Instructors", Instructor)</li> 
       } 
       else if (TempData.ContainsKey("Admin")) 
       { 
        <li>@Html.ActionLink("Admin Profile", "UserProfile", "Instructors", Admin)</li> 
        <li class="dropdown"> 
         <a class="dropdown-toggle" data-toggle="dropdown" href="#">Studnts Panel<span class="caret"></span></a> 
         <ul class="dropdown-menu"> 
          <li>@Html.ActionLink("Attendance Reception For"+" "+DateTime.Now.ToString("dd/MM/yyyy"), "AttendanceReception", "Attendance")</li> 
          <li>@Html.ActionLink("Report of Absence" + " " + DateTime.Now.ToString("dd/MM/yyyy"), "Report", "Attendance")</li> 
          <li>@Html.ActionLink("Report of Attendance" + " " + DateTime.Now.ToString("dd/MM/yyyy"), "ReportOfAttendance", "Attendance")</li> 
          <li>@Html.ActionLink("Attendance Reprots in time", "Reportattendanceinperiod", "Attendance")</li> 
          <li>@Html.ActionLink("Absence Reprots in time", "Reportabsenceinperiod", "Attendance")</li> 
          <li>@Html.ActionLink(" Quartz library resposible for calling this action daily", "Claculatebsence", "Attendance")</li> 
          @*RepoertAttendanceTaskSchedular Class in Models*@ 
          <li>@Html.ActionLink("Students", "StudentsList", "Students")</li> 
          <li>@Html.ActionLink("Students", "SubmitToDepartment", "Students")</li> 
         </ul> 
        </li> 
       } 
      } 
     </ul> 
     @Html.Partial("_LoginPartial") 
    </div> 
</div> 

+0

謝謝你的回覆。我知道那頁但它不回答我的問題。對不起,我沒有把我的「問題」弄清楚。也許這有助於:我有2個資源A和B.有些用戶可以訪問A,有些可以訪問B或兩者。我想過用'角色'或'索賠'來保護他們。這一切都在API中完成。在網站(ASP MVC)上,我想知道是否應根據其訪問權限顯示資源的菜單項。也許我應該創建一個API端點來請求訪問權限?這是一個正確的方法來做到這一點? –

+0

理解我做了類似的事情,當用戶登錄時,我將數據庫中返回的對象保存在tempdate中,並且每次檢查該對象時都會根據菜單項的類型顯示和隱藏。 – AlameerAshraf

+0

@ SEG.Veenstra我更新了答案,檢查了一下。 – AlameerAshraf

相關問題