使用相同的查询从数据库中获取管理员角色的所有数据,但不获取其他角色的所有数据
Get all data from database for Administrator role but not for other roles, using same query
我目前正在 Visual Studio 2019 年使用 ASP.NET MVC 5 开发 Web 应用程序。
该应用程序是关于学校管理系统。
应用程序有一个控制和管理系统,它对所有具有某些角色的登录用户具有相同的UI。
角色是管理员、教师、会计
当任何上述角色的用户登录时,用户会看到一个主屏幕仪表板,他们可以在其中查看学校相关和 class 相关的简要快照数据。
管理员将能够在同一仪表板页面和整个 Web 应用程序中查看学校、学生和教师的所有数据。
教师将只能看到与其 class 和学生相关的数据,不能看到管理员和会计角色的数据。
我考虑过使用登录用户的某个 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);
}
}
我认为如果您使用 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);
}
我目前正在 Visual Studio 2019 年使用 ASP.NET MVC 5 开发 Web 应用程序。
该应用程序是关于学校管理系统。
应用程序有一个控制和管理系统,它对所有具有某些角色的登录用户具有相同的UI。
角色是管理员、教师、会计
当任何上述角色的用户登录时,用户会看到一个主屏幕仪表板,他们可以在其中查看学校相关和 class 相关的简要快照数据。
管理员将能够在同一仪表板页面和整个 Web 应用程序中查看学校、学生和教师的所有数据。
教师将只能看到与其 class 和学生相关的数据,不能看到管理员和会计角色的数据。
我考虑过使用登录用户的某个 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);
}
}
我认为如果您使用 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);
}