我目前正在使用 ASP.NET MVC 5 和 Visual Studio 2019 開發 Web 應用程式。
該應用程式是關于學校管理系統。
應用程式有一個控制和管理系統,它為具有某些角色的所有登錄用戶提供相同的 UI。
角色是管理員、教師、會計師
當上述角色的任何用戶登錄時,用戶會看到一個主螢屏儀表板,在那里他們可以查看學校相關和班級相關的簡要快照資料。
管理員將能夠在同一儀表板頁面和整個網路應用程式上查看學校、學生和教師的所有資料。
教師將只能看到與其班級和學生相關的資料,而不能看到管理員和會計角色的資料。
我想過使用一些登錄用戶的 id 將引數傳遞給每個 LINQ 查詢,但結果是,只有在教師登錄但管理員需要所有資料時,LINQ 中的哪里才有用,所以我需要在那個時候修改查詢。
如何使用相同的控制器實作這一點,將完整資料提供給管理員角色并將部分資料提供給教師角色?
家庭控制器
public class HomeController : Controller
{
DBEntities db = new DBEntities();
public ActionResult Index()
{
return View();
}
public ActionResult GetLatestActivity(int id)
{
var data = from n in db.ACTIVITies
where n.USERID == id //This is ok when teacher is logged in but Admin needs all data, so not useful there
orderby n.ID descending
select new ActivityViewModel
{
ID = n.ID,
AREA = n.AREA,
SECTION = n.SECTION,
MESSAGE = n.MESSAGE,
CREATE_TIMESTAMP = (DateTime)n.CREATE_TIMESTAMP
};
return Json(data.Take(6), JsonRequestBehavior.AllowGet);
}
}
uj5u.com熱心網友回復:
如果您使用的是 Microsoft.AspNet.Identity,我認為您可以這樣做,因為我不清楚。否則,您可以實作自己的 isAdmin 檢查方法。
public ActionResult GetLatestActivity(int id)
{
var isAdmin = User.IsInRole("Administrator");
var data = from n in db.ACTIVITies
where n.USERID == (isAdmin ? n.USERID : id)
orderby n.ID descending
select new ActivityViewModel
{
ID = n.ID,
AREA = n.AREA,
SECTION = n.SECTION,
MESSAGE = n.MESSAGE,
CREATE_TIMESTAMP = (DateTime)n.CREATE_TIMESTAMP
};
return Json(data.Take(6), JsonRequestBehavior.AllowGet);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/386286.html
標籤:C# asp.net-mvc 视觉工作室 林克
