簡體   English   中英

MVC6 / EF7:播種主用戶和聲明

[英]MVC6/EF7: Seeding Master User and Claims

我正在使用EF7編寫一個簡單的MVC6應用程序,用於數據端,並且在設置用戶和聲明時遇到了一些問題。 具體來說,我有一個數據庫種子例程,用於使用具有特定聲明的特定用戶(我)來填充數據庫中的身份表。 此種子方法從startup.cs中調用。

很簡單:

    public static async Task CreateMasterUser( UserManager<ApplicationUser> userMgr, ILogger logger )
    {
        var user = await userMgr.FindByEmailAsync("my email");

        if( user == null )
        {
            user = new ApplicationUser()
            {
                Email = "my email",
                FirstName = "blah",
                LastName = "blah",
                UserName = "Blah",
            };

            IdentityResult result = await userMgr.CreateAsync(user, "mypw");

            if( !result.Succeeded )
            {
                logger.LogCritical("Failed to create master user. Messages were: " + String.Join("; ", result.Errors.Select(x => x.Description)));
                return;
            }
        }

        await AddClaim(user, userMgr, "user.add", "allowed");
        await AddClaim(user, userMgr, "user.delete", "allowed");
        await AddClaim(user, userMgr, "user.edit.self", "allowed");
        await AddClaim(user, userMgr, "user.edit.all", "allowed");
        await AddClaim(user, userMgr, "user.confirm", "allowed");
        await AddClaim(user, userMgr, "content.add", "allowed");
        await AddClaim(user, userMgr, "content.view", "allowed");
        await AddClaim(user, userMgr, "content.edit", "allowed");
        await AddClaim(user, userMgr, "content.delete", "allowed");
    }

    private static async Task AddClaim( ApplicationUser user, UserManager<ApplicationUser> userMgr, string claim, string value )
    {
        if( user.Claims.SingleOrDefault(x => x.ClaimType == claim) == null )
            await userMgr.AddClaimAsync(user, new Claim(claim, value));
    }

但是索賠部分存在一個問題:每次站點啟動時,都會為我添加一組新的索賠(即,為同一用戶創建重復的索賠)。

當我單步執行代碼時,即使數據庫(sql服務器)在AspNetUserClaims中為相關用戶顯示條目,user.Claims也永遠不會包含任何條目。

好像FindEmailAsync沒有從數據庫中填充Claims集合。

我如何做到這一點?

看一下UserManager的GetClaimsAsync方法。 明確填充您的Claims集合。

user.Claims = await userMgr.GetClaimsAsync(user);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM