Clear        


                
                    @using System.Security.Claims @* extra using directives can be added in the views, here it is added for using the ClaimTypes class below *@

@model IEnumerable<UserModel>

@* Generated from Custom Template. *@
@* Model namespace using directive should be added to _ViewImports.cshtml. *@

@{
    var containerDivClass = "container";
}
@{
    ViewData["Title"] = "User List";
}

<div class="@containerDivClass">
    <h3>@ViewData["Title"]</h3>
    <hr />
</div>

@if (Model is not null)
{
    <form asp-action="Index" autocomplete="off">
        <div class="@containerDivClass">
            <div class="row">
                <div class="col-12 text-danger">
                    @TempData["Message"]
                </div>
            </div>
            <div class="row mb-3">
                <div class="col-10 text-success">
                    @Model.Count() record(s) found.
                </div>
                <div class="col-2 text-end">

                    @if (User.IsInRole("Admin")) // show Create link for the Admin role
                    {
                        <a asp-action="Create">Create</a>
                    }

                </div>
            </div>
            <table class="table table-striped table-hover">
                <thead class="table-secondary">
                    <tr>
                        <th>
                            @Html.DisplayNameFor(model => model.UserName)
                        </th>

                        @* we don't want to show the password in user list, this part can be deleted *@
                        @* <th>
                            @Html.DisplayNameFor(model => model.Password)
                        </th> *@

                        <th>
                            @Html.DisplayNameFor(model => model.IsActive)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.Status)
                        </th>

                        <th>
                            @Html.DisplayNameFor(model => model.Role) @* property for formatted or relational data in the model *@
                        </th>

                        <th></th>
                    </tr>
                </thead>
                <tbody>
		            @foreach (var item in Model) {
				        <tr>
					        <td>
						        @Html.DisplayFor(modelItem => item.UserName)
					        </td>

                            @* we don't want to show the password in user list, this part can be deleted *@
                            @* <td>
                                @Html.DisplayFor(modelItem => item.Password)
                            </td> *@

					        <td>
						        @Html.DisplayFor(modelItem => item.IsActive)
					        </td>
					        <td>
						        @Html.DisplayFor(modelItem => item.Status)
					        </td>

					        <td>
                                @Html.DisplayFor(modelItem => item.Role) @* property for formatted or relational data in the model *@
					        </td>

					        <td class="text-end w-25">

                                @if (User.IsInRole("Admin")) // show Details, Edit and Delete links for the Admin role
                                {
						            <a asp-action="Details" asp-route-id="@item.Record.Id">Details</a>@:&nbsp;|&nbsp;
						            <a asp-action="Edit" asp-route-id="@item.Record.Id">Edit</a>@:&nbsp;|&nbsp;
                                    <a asp-action="Delete" asp-route-id="@item.Record.Id">Delete</a>
                                }
                                else // for User role
                                {
                                    // retrieving the user Id from user claims for type Id and converting its string value to integer, then assigning its value to the userId variable
                                    var userId = Convert.ToInt32(User.Claims.SingleOrDefault(c => c.Type == "Id").Value);
                                    if (userId == item.Record.Id) // show Delete link if the item id value equals to the application user's Id value
                                                                  // for allowing the application users delete their own user data
                                    {
                                        <a asp-action="Delete" asp-route-id="@item.Record.Id">Delete</a>
                                    }
                                }

                            </td>
				        </tr>
		            }
                </tbody>
            </table>
        </div>
    </form>
}