ASP.NET의 간단한 MVC 보안 | 블로그 보안 pt. 2: 권한 및 표시

4203 단어 csharpdotnetwebdev
MVC 블로그 사이트의 보안에 대한 시리즈의 2부입니다.

3단계: 다시 들어가십시오.




따라서 귀하의 애플리케이션은 이제 보안이 강화되어 귀하도 들어갈 수 없습니다.
2개의 다른 함수를 호출하는 메서드로 데이터 서비스를 만들 수 있습니다.

public class DataService
    {
        /* Any injected services go here!!
           Don't forget the constructor!! */

        public async Task ManageDataAsync()
        {
            //Task 1: Seed roles (create and enter into Authorization system
            await SeedRolesAsync();
            // Task 2 seed a few users into AspNetUsers
            await SeedUsersAsync();
        }


역할이 없을 때 데이터 서비스를 사용하여 역할을 시드했습니다. (이것은 해당 서비스의 첫 번째 방법입니다)

public async Task SeedRolesAsync()
        {
            //Are there roles in the system? 
            if (_context.Roles.Any())
            {
                return;
            }
            //Spin through enum and do stuff
            foreach (var role in Enum.GetNames(typeof(BlogRole)))
            {
                //create Role in system for each role
                await _roleManager.CreateAsync(new IdentityRole(role));
            }
        }


BlogRole은 관리자와 중재자가 옵션인 열거형이므로 이제 데이터베이스에 존재하는 2개의 역할이 있습니다.

그런 다음 adminUser를 시드할 수 있습니다.

private async Task SeedUsersAsync()
        {
            if (_context.Users.Any())
            {
                return;
            }
            var adminUser = new BlogUser()
            {
                Email = "[email protected]",
                UserName = "[email protected]",
                FirstName = "Admin",
                LastName = "Istrator"
                //OTHER DATA FOR USER CLASS
            };
            await _userManager.CreateAsync(adminUser, _configuration["AdminPassword"]);
            await _userManager.AddToRoleAsync(adminUser, BlogRole.Administrator.ToString());


        }


github에서 비공개로 유지하기 위해 내 관리자 비밀번호가 내 appSettings.json에 있습니다. BlogUser를 사용하여 사용자를 초기화한 곳에서 IdentityUser를 사용할 수도 있습니다.

Program.cs 파일에서 ManageDataAsync가 호출됩니다.
main의 내용은 다음과 같습니다.

        public static async Task Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();
            var host = CreateHostBuilder(args).Build();
            var dataService = host.Services.CreateScope().ServiceProvider.GetRequiredService<DataService>();
            await dataService.ManageDataAsync();

            host.Run();
        }


4단계: 등록되지 않은 대중에게 물건 숨기기





등록되지 않은 새로운 사용자가 내 사이트를 방문하는 경우 액세스가 거부된 페이지로 이동하는 항목을 클릭하지 않았으면 합니다. 제 생각에는 간단한 if 문을 추가하겠습니다.

@if (User.IsInRole("Administrator"))
                    {

                        <li class="nav-item">
                            <a class="nav-link" asp-area="" asp-controller="Blogs" asp-action="Index">Blogs</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" asp-area="" asp-controller="Posts" asp-action="Index">Posts</a>
                        </li>
                    }


내부 콘텐츠는 관리자 역할의 사용자에게 표시하려는 내용입니다. if에 ||를 추가하면 여러 역할을 허용할 수 있으며 else 문을 사용하여 다른 역할에 대해 다른 데이터를 표시할 수 있습니다.

흥미로운 아이디어는 사용자가 프리미엄 사용자가 아닌 경우 구매 페이지로 리디렉션되는 회색 버튼을 제공하여 누락된 항목을 표시하고 업그레이드 옵션을 제공하는 것입니다.

좋은 웹페이지 즐겨찾기