c# - 未授予所需的权限。必须至少授予其中一项权限 : Users

标签 c# asp.net-core dependency-injection authorization aspnetboilerplate

我正在尝试在 ASP.NET 样板项目中实现文件上传。 这是我的代码:

Index.cshtml:

<form asp-controller="Backlog" asp-action="Upload_Image" method="post"
      enctype="multipart/form-data">

  <input type="file" name="file" />

  <button type="submit">Upload Image</button>

</form>

BacklogController.cs:

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Abp.Application.Services.Dto;
using Abp.AspNetCore.Mvc.Authorization;
using MyProject.Authorization;
using MyProject.Controllers;
using MyProject.Users;
using MyProject.Web.Models.Backlog;
using MyProject.Users.Dto;
using System.Collections.Generic;
using MyProject.Backlog;

namespace MyProject.Controllers
{
    [AbpMvcAuthorize(PermissionNames.Pages_Backlog)]
    public class BacklogController : MyProjectControllerBase
    {
        private readonly IUserAppService _userAppService;
        private readonly BacklogAppService _backlogAppService;

        public BacklogController(IUserAppService userAppService, BacklogAppService backlogAppService)
        {
            _userAppService = userAppService;
            _backlogAppService = backlogAppService;
        }

        public async Task<ActionResult> Index()
        {
            var backlogItems = (await _backlogAppService.GetBackLogItems()).Items;

            var model = new BacklogListViewModel
            {
                BacklogItems = backlogItems
            };

            return View(model);
        }

        [HttpPost] // Postback
        public async Task<IActionResult> Upload_Image(IFormFile file)
        {
            if (file == null || file.Length == 0) return Content("file not selected");

            return View();
        }
    }
}

网络应用程序运行,但是当我点击上传按钮时,它说:

the necessary authorizations are not granted. At least one of these permissions must be granted: Users

我哪里做错了?否则,是否有更简单的方法在 ASP.NET Boilerplate 上实现文件上传?

最佳答案

您正在注入(inject) IUserAppServiceits implementation需要 PermissionNames.Pages_Users:

[AbpAuthorize(PermissionNames.Pages_Users)]
public class UserAppService : AsyncCrudAppService<...>, IUserAppService

这些是您的选择:

  1. BacklogController 中移除 IUserAppService 的注入(inject),因为您没有使用它。

    // private readonly IUserAppService _userAppService;
    private readonly BacklogAppService _backlogAppService;
    
    // public BacklogController(IUserAppService userAppService, BacklogAppService backlogAppService)
    public BacklogController(BacklogAppService backlogAppService)
    {
        // _userAppService = userAppService;
        _backlogAppService = backlogAppService;
    }
    
  2. 以租户管理员身份登录,默认授予 PermissionNames.Pages_Users

  3. 向您已登录的用户授予 PermissionNames.Pages_Users

关于c# - 未授予所需的权限。必须至少授予其中一项权限 : Users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55107976/

相关文章:

c# - 扩展工具包 DatePicker 日历字体大小

c# - 为什么要创建 ASP.NET 5 类库项目?

java - 了解 Dagger2 流程(提供的示例)

c# - 5 年后 - MEF 中是否有惰性 dll 加载?

c# - 是否可以直接使用 Microsoft.Win32 命名空间中的 Win32Native 类?

c# - .net winforms 应用程序的安全连接

c# - 项目中的依赖Twilio不支持框架DNXCore,版本=v5.0

c# - 我的 IUserClaimsPrincipalFactory 实现导致 IdentityServer4 上出现 StackOverflowException

c# - unity 创建具体实例

.net - 为什么 Unity RegisterType<TFrom, TTo> 无法正确重新注册映射