对于这样一个普遍的问题一定有一个简单的解决方案,所以我为我的无知提前道歉:
我有一个多用户 Web 应用程序(带有 EF6 的 Asp.net MVC5),允许用户查看和/或修改存储在多个相关表(Company、Csearch、Candidate)中的相关数据。(更多详情请参见下文)。他们不应该看到任何其他数据(例如通过篡改 URL)。
我使用 Asp.net Identity 2.0 进行身份验证,并且也想将其用于上述授权。用户数据存储在标准的 AspNetUser 表中。我仅对身份表和业务表使用一种上下文。
我想我必须使用角色或声明来解决这个问题,但我找不到任何关于如何做到这一点的指导。有人能指出我正确的方向吗?
我目前已经通过向 CompanyController 添加 LINQ 条件来解决它(对于公司模型),但这似乎不是解决问题的非常安全和正确的方法。
public ActionResult Index(int? id, int? csearchid)
{
var companies = db.Companies
.OrderBy(i => i.CompanyName)
.Where(t => t.UserName == User.Identity.Name);
return View(companies);
Run Code Online (Sandbox Code Playgroud)
我的数据模型很简单,我使用 Visual Studio 2017 搭建了它的脚手架,首先通过 EF6 代码,我构建了一个关系数据模型,大致如下:
一个公司可以有多个搜索(一对多)。每个搜索可以有多个候选者(一对多)。一个公司可以有多个登录用户。用户保存在 ASP.Net Identity 生成的 AspNetUsers 表中。
我的公司模型如下:
public class Company
{
public int CompanyID { get; set; }
// Link naar de Userid in Identity: AspNetUsers.Id
[Display(Name = "Username")]
public …Run Code Online (Sandbox Code Playgroud) 当我尝试使用 Microsoft Graph API 通过守护程序应用将文件上传到 OneDrive 时,收到错误 400 错误请求。我使用 HttpClient,而不是 GraphServiceClient,因为后者假定交互并与 DeleatedAuthenticationProvider(?) 一起使用。
main MethodUpload通过 Helper 获取 AccessTokenAuthenticationConfig并使用 Helper 将文件放入 OneDrive/SharePoint ProtectedApiCallHelper。
[HttpPost]
public async Task<IActionResult> Upload(IFormFile file)
{
var toegang = new AuthenticationConfig();
var token = toegang.GetAccessTokenAsync().GetAwaiter().GetResult();
var httpClient = new HttpClient();
string bestandsnaam = file.FileName;
var serviceEndPoint = "https://graph.microsoft.com/v1.0/drive/items/{Id_Of_Specific_Folder}/";
var wurl = serviceEndPoint + bestandsnaam + "/content";
// The variable wurl looks as follows: "https://graph.microsoft.com/v1.0/drive/items/{Id_Of_Specific_Folder}/proefdocument.txt/content"
var apicaller …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的对象列表,但不知何故,在每个 foreach 循环中,以前的记录都会被新的循环覆盖,以前的记录会被新记录覆盖。因此,如果 realData 中有 6 个条目,则列表将包含最后一条记录的 6 倍。
我是否以某种方式重新创建列表而不是添加到列表中?我是否还忽略了另一种创建列表的替代方法?
我的代码是
public async Task<IActionResult> OrderOverview()
{
var itemList = new List<OrderItemVM>();
var realData = await _context.OrderItem.ToListAsync();
var orderItemVM = new OrderItemVM();
foreach (var item in realData)
{
orderItemVM.Id = item.Id;
orderItemVM.OrderId = item.OrderId;
orderItemVM.OrderName = _context.Order.Find(item.OrderId).OrderName;
orderItemVM.ItemName = item.ItemName;
itemList.Add(orderItemVM);
}
return View(itemList);
}
Run Code Online (Sandbox Code Playgroud)