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();
}
}