Hi
I need to hide one menu for admin only so I have added a permission check after login that menu is coming but when we reload or refresh page that time it's hiding that menu. Could you please provide me solution for this.
I tried below code but no luck.
ICurrentUser currentUser = context.ServiceProvider.GetRequiredService<ICurrentUser>();
bool IsAdmin = currentUser.IsInRole("admin");
if (!IsAdmin)
{
//menu code
}
- ABP Framework version: v4.4.3
- UI type: Blazor
- DB provider: EF Core
- Tiered (MVC) or Identity Server Separated (Angular): no
- Exception message and stack trace:
- Steps to reproduce the issue:"
47 Answer(s)
-
0
Hi @safi, unfortunately, the menu can't be updated without refreshing the page currently. There is an issue about this, you can follow the issue to see progress.
Also, you can see this comment if you want to look for a workaround. You can apply a similar solution.
-
0
Hi @safi, unfortunately, the menu can't be updated without refreshing the page currently. There is an issue about this, you can follow the issue to see progress.
Also, you can see this comment if you want to look for a workaround. You can apply a similar solution.
The problem is I have unchecked the permission checkbox and still able to see that menu after login.
-
0
Hi @safi, sorry for the late response. Currently, there is a problem to check menu items according to role names (because of the ordering problem, the menu is drawn once and not updated according to auth changes properly). We aim to fix it in the next version. There is an open Github issue about it.
Btw, your credit is refunded.
In meantime, maybe you can consider using a permission check instead of a role name check, by using the
RequirePermission("PermissionName")
extension method.Example:
context.Menu.AddItem( new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"]) .AddItem(new ApplicationMenuItem( name: "MyProject.Crm.Customers", displayName: l["Menu:Customers"], url: "/crm/customers") .RequirePermissions("MyProject.Crm.Customers") //require permission ); );
-
0
Hi @safi, sorry for the late response. Currently, there is a problem to check menu items according to role names (because of the ordering problem, the menu is drawn once and not updated according to auth changes properly).
We aim to fix it in the next version. There is an open Github issue about it.Btw, your credit is refunded.
In meantime, maybe you can consider using a permission check instead of a role name check, by using the
RequirePermission("PermissionName")
extension method.Example:
context.Menu.AddItem( new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"]) .AddItem(new ApplicationMenuItem( name: "MyProject.Crm.Customers", displayName: l["Menu:Customers"], url: "/crm/customers") .RequirePermissions("MyProject.Crm.Customers") //require permission ); );
No it's not working so can we connect on zoom for this?
-
0
hi
This seems a known problem. it was fixed in 5.0
https://github.com/abpframework/abp/issues/8851 https://github.com/abpframework/abp/commit/dc9f278c11ed5a017a878cbcd7ce9222ab70ac4e
Thanks for the response but the problem is we can't update the version now so can u please suggest what I can do in this case.
-
0
You can override these classes and apply the changes.
https://docs.abp.io/en/abp/latest/UI/Blazor/Customization-Overriding-Components
namespace Volo.Abp.AspNetCore.Components.Web.LeptonTheme.Components.ApplicationLayout.Navigation class MainSiderbar namespace Volo.Abp.AspNetCore.Components.WebAssembly.LeptonTheme.Components.ApplicationLayout.MainHeader class MainHeaderToolbarUserMenu
-
0
You can override these classes and apply the changes.
https://docs.abp.io/en/abp/latest/UI/Blazor/Customization-Overriding-Components
namespace Volo.Abp.AspNetCore.Components.Web.LeptonTheme.Components.ApplicationLayout.Navigation class MainSiderbar namespace Volo.Abp.AspNetCore.Components.WebAssembly.LeptonTheme.Components.ApplicationLayout.MainHeader class MainHeaderToolbarUserMenu
where I need to add this Mainsidebar
-
0
Please check this document carefully https://docs.abp.io/en/abp/latest/UI/Blazor/Customization-Overriding-Components#example-replacing-with-the-code-behind-file
I copied code from above answer https://support.abp.io/QA/files/c24af87f24acad470c7b3a0333981190.png
https://support.abp.io/QA/files/91d3c9b655169d2d50cb3a033397ea66.png
Please it's very important for me to resolve this can we connect on zoom?
-
0
MainHeadertoolbarUserMenu.razor
.cs code
namespace Volo.Abp.AspNetCore.Components.WebAssembly.LeptonTheme.Components.ApplicationLayout.MainHeader { public partial class RKIMainHeaderToolbarUserMenu : IDisposable { [Inject] protected IMenuManager MenuManager { get; set; }
[Inject] protected ICurrentUser CurrentUser { get; set; } [Inject] protected ICurrentTenant CurrentTenant { get; set; } [Inject] protected SignOutSessionStateManager SignOutManager { get; set; } [Inject] protected NavigationManager Navigation { get; set; } [Inject] protected AuthenticationStateProvider AuthenticationStateProvider { get; set; } [Inject] protected IStringLocalizer<AbpUiResource> UiLocalizer { get; set; } [Inject] protected IOptions<AbpRemoteServiceOptions> RemoteServiceOptions { get; set; } [Inject] protected IJSRuntime JsRuntime { get; set; } protected ApplicationMenu UserMenu { get; set; } protected Guid? UserId { get; set; } protected string UserName { get; set; } protected string TenantName { get; set; } protected string ProfileImageUrl { get; set; } protected string UserFullName { get; set; } protected override async Task OnInitializedAsync() { await SetUserMenuAndProfileAsync(); Navigation.LocationChanged += OnLocationChanged; AuthenticationStateProvider.AuthenticationStateChanged += AuthenticationStateProviderOnAuthenticationStateChanged; } private async Task SetUserMenuAndProfileAsync() { UserMenu = await MenuManager.GetAsync(StandardMenus.User); UserId = CurrentUser.Id; UserName = CurrentUser.UserName; UserFullName = CalculateUserFullName(); TenantName = CurrentTenant.Name; if (UserId != null) { ProfileImageUrl = RemoteServiceOptions.Value.RemoteServices.GetConfigurationOrDefaultOrNull("AbpAccountPublic")?.BaseUrl.TrimEnd('/') + $"/api/account/profile-picture-file/{UserId}"; } } protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) { InvokeAsync(StateHasChanged); } private async void AuthenticationStateProviderOnAuthenticationStateChanged(Task<AuthenticationState> task) { await SetUserMenuAndProfileAsync(); await InvokeAsync(StateHasChanged); } protected virtual async Task BeginSignOut() { await SignOutManager.SetSignOutState(); await NavigateToAsync("authentication/logout"); } protected virtual async Task NavigateToAsync(string uri, string target = null) { if (target == "_blank") { await JsRuntime.InvokeVoidAsync("open", uri, target); } else { Navigation.NavigateTo(uri); } } protected virtual string CalculateUserFullName() { //TODO: Should we move this logic to some extension method for the ICurrentUser? var fullName = new StringBuilder(); if (!CurrentUser.Name.IsNullOrEmpty()) { fullName.Append(CurrentUser.Name); } if (!CurrentUser.SurName.IsNullOrEmpty()) { if (fullName.Length > 0) { fullName.Append(" "); } fullName.Append(CurrentUser.SurName); } if (fullName.Length == 0) { fullName.Append(CurrentUser.UserName); } return fullName.ToString(); } public void Dispose() { Navigation.LocationChanged -= OnLocationChanged; AuthenticationStateProvider.AuthenticationStateChanged -= AuthenticationStateProviderOnAuthenticationStateChanged; } }
}
-
0
There seems to be no problem, can you test it in the project?
no, it's not working. I am requesting can we connect on zoom because it's taking too much time to check and post and ask for solutions here again and again. Today is my deadline for this project that's why I am bothering you, again and again, hope you can understand this.
Thanks,
-
0
@safi we can't solve your problem by iterating every step. send us your project to [email protected]
-
0
@safi we can't solve your problem by iterating every step. send us your project to [email protected]
Hi Albert
I can't share project due to security that's why I am asking to connect on zoom and check this.
-
0
Sure, you can send your project to [email protected]
-
0
Sure, you can send your project to [email protected]
Hi
I can't share project but I shared code and error in mail so can you pls check.
-
0
Sure, you can send your project to [email protected]
are u checking?
-
0
Sure, you can send your project to [email protected]
are u checking?
I've checked and write you an email back, can you check and apply it?
-
0
Sure, you can send your project to [email protected]
are u checking?
I've checked and write you an email back, can you check and apply it?
yes it's working now thanks much :)