persistedGrant in identity server 4

45 Views Asked by At

im using identity server 4 with asp .net identity and i want to display all the authorized applications for each user user for example : user A : app1 app3 user B : app1 user C : app2 so in order to reach this i try to inject the IIdentityServerInteractionServiceand i use GetAllUserGrantsAsync()

NB: im using a blazor server application which is a client for my server

    [Parameter]
    public string? UserId { get; set; }
    [Inject] private IIdentityServerInteractionService _service { get; set; }
    private UserIdentity? User { get; set; }
    private string? LoginProvider { get; set; } 
    private string LastLogin { get; set; }
    private IEnumerable<UserIdentityRole> Roles { get; set; }
    [Inject] private AdminIdentityDbContext? _context { get; set; }
    protected override async Task OnInitializedAsync()
    {
        var x = await _service.GetAllUserGrantsAsync();
        try
        {
        }catch(Exception ex)
        {
            Console.WriteLine(ex);
        }
        User = _context.Users.FirstOrDefault(user => user.Id == UserId) ?? new UserIdentity();
        var logins = _context.UserClaims.Where(userClaim => userClaim.UserId == UserId && userClaim.ClaimType == "LoginAttempt").ToList();
        if(logins.Count() == 0)
        {
            LastLogin = "Not yet";            
        }
        else
        {
            LastLogin = logins.MaxBy(log => log.ClaimValue).ClaimValue ;
        }
        LoginProvider = (_context.UserLogins.FirstOrDefault(user => user.UserId == UserId) ?? new UserIdentityUserLogin() ).LoginProvider ?? "local";

        Roles = _context.Roles
              .Join(
              _context.UserRoles.Where(userRole => userRole.UserId == UserId),
              role => role.Id,
              user => user.RoleId,
              (_role, _user) => new UserIdentityRole
                   {
                       Id = _role.Id,
                       Name = _role.Name,
                       NormalizedName = _role.NormalizedName,
                       ConcurrencyStamp = _role.ConcurrencyStamp
                   }).ToHashSet();
    }
    private void Delete()
    {
        if (User is null)
        {
            return;   
        }
        _context.Users.Remove(User);
        _context.SaveChanges();
        NavigationManager.NavigateTo("/user");
    }
    private void Block()
    {
        if(User is null)
            return;

        User.LockoutEnabled = true;
        User.LockoutEnd = DateTime.MaxValue;
        _context.Users.Update(User);
        _context.SaveChanges();

    }
    private void UnBlock()
    {
        if (User is null)
            return;
        User.LockoutEnd = DateTime.UtcNow;
        _context.Users.Update(User);
        _context.SaveChanges();
    }
    private async Task  UpdateName(UserIdentity User)
    {
        var parameters = new DialogParameters<UpdateNameDialog> { { x => x.User, User } };
        var options = new DialogOptions { CloseOnEscapeKey = true };
        var dialog = DialogService.Show<UpdateNameDialog>("Update Name",parameters, options);
        var result = await dialog.Result;
        if (!result.Cancelled)
        {
            OnInitialized();
        }
    }
    private async Task UpdateEmail(UserIdentity User)
    {
        var parameters = new DialogParameters<UpdateEmailDialog> { { x => x.User, User } };
        var options = new DialogOptions { CloseOnEscapeKey = true };
        var dialog = DialogService.Show<UpdateEmailDialog>("Update Email", parameters, options);
        var result = await dialog.Result;
        if (!result.Cancelled)
        {
            OnInitialized();
        }
    }
    private async Task OpenDeleteRoleDialog(string Id)
    {
        var parameters = new DialogParameters<DeleteUserRoleDialog> { { x => x.UserRole, new UserIdentityUserRole()
        {
          UserId = UserId,
          RoleId = Id,
        }}};
        var options = new DialogOptions { CloseOnEscapeKey = true };
        var dialog = DialogService.Show<DeleteUserRoleDialog>("Delete This Role", parameters, options);
        var result = await dialog.Result;
        if (!result.Cancelled)
        {
            OnInitialized();
        }
    }
    private async Task OpenAssignRoleDialog()
    {
        var parameters = new DialogParameters<AssignRole> { { x => x.UserId, UserId }, { x => x.UserRoles, Roles } };
        var options = new DialogOptions { CloseOnEscapeKey = true };
        var dialog = DialogService.Show<AssignRole>("AddRole", parameters, options);
        var result = await dialog.Result;
        if (!result.Cancelled)
        {
            OnInitialized();
        }
    }

0

There are 0 best solutions below