using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using xCommons.Attributes;
using xCommons.Extensions;
using xIdentityHelper;
using xModels.Dtos;
using static IdentityServer4.IdentityServerConstants;
namespace xIds.Controllers
{
public partial class AccountController
{
///
/// Query Users
/// for specifiy users role for query user 'role: string' and 'forceRole: boolean' in header
///
/// how to filter results based on XQuery structure
/// an string which represent user role
/// if it's true the user must has exact role, otherwise top level users also listed
/// an instance of XQueryResult of XUserProfileDto
[RequireXPowered]
[HttpGet("Users/Query")]
[Authorize(Policy = LocalApi.PolicyName)]
[Authorize(Policy = XPolicies.EnabledUser)]
public async Task>> QueryUsers(
[FromQuery] XQuery query,
[FromHeader] string role,
[FromHeader] bool forceRole = false
)
{
//
// Do Actions ...
try
{
//
// Retrieve User Info ...
var userInfo = await GetUserInfo();
//
// Retrieve Result Based on Provided Query ...
var result = await IdentityManager.QueryUsers(
role: role,
query: query,
forceRole: forceRole,
requestedUserSelectByParam: userInfo.UserId
);
//
// Return result ...
return Ok(result
.ToDynamicObject());
}
catch (Exception ex)
{
//
var exception = GetExceptionActionResult(ex);
return exception;
}
}
}
}