@BrandingProvider.AppName
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs
index 815c1c48c9..3a61407ddf 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/Integration/IIdentityUserIntegrationService.cs
@@ -10,12 +10,20 @@ namespace Volo.Abp.Identity.Integration;
public interface IIdentityUserIntegrationService : IApplicationService
{
Task
GetRoleNamesAsync(Guid id);
-
+
Task FindByIdAsync(Guid id);
Task FindByUserNameAsync(string userName);
Task> SearchAsync(UserLookupSearchInputDto input);
+ Task> SearchByIdsAsync(Guid[] ids);
+
Task GetCountAsync(UserLookupCountInputDto input);
-}
\ No newline at end of file
+
+ Task> SearchRoleAsync(RoleLookupSearchInputDto input);
+
+ Task> SearchRoleByNamesAsync(string[] ids);
+
+ Task GetRoleCountAsync(RoleLookupCountInputDto input);
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupCountInputDto.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupCountInputDto.cs
new file mode 100644
index 0000000000..875d350f1c
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupCountInputDto.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.Identity;
+
+public class RoleLookupCountInputDto
+{
+ public string Filter { get; set; }
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupSearchInputDto.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupSearchInputDto.cs
new file mode 100644
index 0000000000..ebc1707055
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/RoleLookupSearchInputDto.cs
@@ -0,0 +1,8 @@
+using Volo.Abp.Application.Dtos;
+
+namespace Volo.Abp.Identity;
+
+public class RoleLookupSearchInputDto : ExtensiblePagedAndSortedResultRequestDto
+{
+ public string Filter { get; set; }
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs
index 37446ce1f3..4019cd9031 100644
--- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/Integration/IdentityUserIntegrationService.cs
@@ -2,6 +2,7 @@
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
+using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users;
namespace Volo.Abp.Identity.Integration;
@@ -10,13 +11,19 @@ public class IdentityUserIntegrationService : IdentityAppServiceBase, IIdentityU
{
protected IUserRoleFinder UserRoleFinder { get; }
protected IdentityUserRepositoryExternalUserLookupServiceProvider UserLookupServiceProvider { get; }
+ protected IIdentityUserRepository UserRepository { get; }
+ protected IIdentityRoleRepository RoleRepository { get; }
public IdentityUserIntegrationService(
IUserRoleFinder userRoleFinder,
- IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider)
+ IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider,
+ IIdentityUserRepository userRepository,
+ IIdentityRoleRepository roleRepository)
{
UserRoleFinder = userRoleFinder;
UserLookupServiceProvider = userLookupServiceProvider;
+ UserRepository = userRepository;
+ RoleRepository = roleRepository;
}
public virtual async Task GetRoleNamesAsync(Guid id)
@@ -62,8 +69,53 @@ public class IdentityUserIntegrationService : IdentityAppServiceBase, IIdentityU
);
}
+ public virtual async Task> SearchByIdsAsync(Guid[] ids)
+ {
+ var users = await UserRepository.GetListByIdsAsync(ids);
+
+ return new ListResultDto(
+ users
+ .Select(u => new UserData(
+ u.Id,
+ u.UserName,
+ u.Email,
+ u.Name,
+ u.Surname,
+ u.EmailConfirmed,
+ u.PhoneNumber,
+ u.PhoneNumberConfirmed,
+ u.TenantId,
+ u.IsActive,
+ u.ExtraProperties))
+ .ToList()
+ );
+ }
+
public virtual async Task GetCountAsync(UserLookupCountInputDto input)
{
return await UserLookupServiceProvider.GetCountAsync(input.Filter);
}
+
+ public virtual async Task> SearchRoleAsync(RoleLookupSearchInputDto input)
+ {
+ using (RoleRepository.DisableTracking())
+ {
+ var roles = await RoleRepository.GetListAsync(input.Filter);
+ return new ListResultDto(roles.Select(r => new RoleData(r.Id, r.Name, r.IsDefault, r.IsStatic, r.IsPublic, r.TenantId, r.ExtraProperties)).ToList());
+ }
+ }
+
+ public virtual async Task> SearchRoleByNamesAsync(string[] names)
+ {
+ using (RoleRepository.DisableTracking())
+ {
+ var roles = await RoleRepository.GetListAsync(names);
+ return new ListResultDto(roles.Select(r => new RoleData(r.Id, r.Name, r.IsDefault, r.IsStatic, r.IsPublic, r.TenantId, r.ExtraProperties)).ToList());
+ }
+ }
+
+ public virtual async Task GetRoleCountAsync(RoleLookupCountInputDto input)
+ {
+ return await RoleRepository.GetCountAsync(input.Filter);
+ }
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs
index 1835f38952..75261b2cc4 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using System.Threading;
using System.Threading.Tasks;
namespace Volo.Abp.Identity;
@@ -7,6 +9,14 @@ public interface IUserRoleFinder
{
[Obsolete("Use GetRoleNamesAsync instead.")]
Task GetRolesAsync(Guid userId);
-
+
Task GetRoleNamesAsync(Guid userId);
+
+ Task> SearchUserAsync(string filter, int page = 1);
+
+ Task> SearchRoleAsync(string filter, int page = 1);
+
+ Task> SearchUserByIdsAsync(Guid[] ids);
+
+ Task> SearchRoleByNamesAsync(string[] names);
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json
index 49b22071cd..71b858f834 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json
@@ -135,6 +135,8 @@
"ModificationTime": "وقت التعديل",
"PasswordUpdateTime": "وقت تحديث كلمة المرور",
"LockoutEndTime": "وقت انتهاء القفل",
- "FailedAccessCount": "فشل عدد الوصول"
+ "FailedAccessCount": "فشل عدد الوصول",
+ "UserResourcePermissionProviderKeyLookupService": "المستخدم",
+ "RoleResourcePermissionProviderKeyLookupService": "الدور"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json
index 8f0456c601..e84320059e 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json
@@ -135,6 +135,8 @@
"ModificationTime": "Doba úpravy",
"PasswordUpdateTime": "Čas aktualizace hesla",
"LockoutEndTime": "Čas konce uzamčení",
- "FailedAccessCount": "Počet neúspěšných přístupů"
+ "FailedAccessCount": "Počet neúspěšných přístupů",
+ "UserResourcePermissionProviderKeyLookupService": "Uživatel",
+ "RoleResourcePermissionProviderKeyLookupService": "Role"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json
index 19daf4d440..4064866f00 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Endzeit der Sperrung",
"FailedAccessCount": "Anzahl der fehlgeschlagenen Zugriffe",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "E-Mail-Verifizierung für die Registrierung erzwingen",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Benutzerkonten werden nicht erstellt, es sei denn, sie verifizieren ihre E-Mail-Adressen."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Benutzerkonten werden nicht erstellt, es sei denn, sie verifizieren ihre E-Mail-Adressen.",
+ "UserResourcePermissionProviderKeyLookupService": "Benutzer",
+ "RoleResourcePermissionProviderKeyLookupService": "Rolle"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json
index 1e2c8a23ce..ba610a993a 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json
@@ -128,6 +128,8 @@
"Description:Abp.Identity.User.IsEmailUpdateEnabled": "Εάν το email μπορεί να ενημερωθεί από τον χρήστη.",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Επιβολή επαλήθευσης email για εγγραφή",
"Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Οι λογαριασμοί χρηστών δεν θα δημιουργηθούν εκτός αν επαληθεύσουν τις διευθύνσεις email τους.",
- "Details": "Λεπτομέρειες"
+ "Details": "Λεπτομέρειες",
+ "UserResourcePermissionProviderKeyLookupService": "Χρήστης",
+ "RoleResourcePermissionProviderKeyLookupService": "Ρόλος"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json
index 45f25bc864..9f10e1f188 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json
@@ -137,6 +137,8 @@
"Description:Abp.Identity.UsersCanChange": "Allow users to change their Two Factor.",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Enforce email verification to register",
"Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "User accounts will not be created unless they verify their email addresses.",
- "Details": "Details"
+ "Details": "Details",
+ "UserResourcePermissionProviderKeyLookupService": "User",
+ "RoleResourcePermissionProviderKeyLookupService": "Role"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json
index f2cc74cef0..0deb6a4b56 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json
@@ -135,6 +135,8 @@
"ModificationTime": "Modification time",
"PasswordUpdateTime": "Password update time",
"LockoutEndTime": "Lockout end time",
- "FailedAccessCount": "Failed access count"
+ "FailedAccessCount": "Failed access count",
+ "UserResourcePermissionProviderKeyLookupService": "User",
+ "RoleResourcePermissionProviderKeyLookupService": "Role"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json
index ff4d4302f8..a2a9414214 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json
@@ -135,6 +135,8 @@
"ModificationTime": "tiempo de modificación",
"PasswordUpdateTime": "Hora de actualización de contraseña",
"LockoutEndTime": "Hora de finalización del bloqueo",
- "FailedAccessCount": "Recuento de acceso fallido"
+ "FailedAccessCount": "Recuento de acceso fallido",
+ "UserResourcePermissionProviderKeyLookupService": "Usuario",
+ "RoleResourcePermissionProviderKeyLookupService": "Rol"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json
index 024b443fec..e9a1911b52 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json
@@ -139,6 +139,8 @@
"Description:Abp.Identity.SignIn.RequireConfirmedEmail": "کاربران میتوانند حساب ایجاد کنند اما تا زمانی که آدرس ایمیل خود را تایید نکنند نمیتوانند وارد شوند.",
"Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "کاربران میتوانند حساب ایجاد کنند اما تا زمانی که شماره تلفن خود را تایید نکنند نمیتوانند وارد شوند.",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "اجباری کردن تایید ایمیل برای ثبتنام",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "حسابهای کاربری ایجاد نخواهند شد مگر اینکه آدرس ایمیل خود را تایید کنند."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "حسابهای کاربری ایجاد نخواهند شد مگر اینکه آدرس ایمیل خود را تایید کنند.",
+ "UserResourcePermissionProviderKeyLookupService": "کاربر",
+ "RoleResourcePermissionProviderKeyLookupService": "نقش"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json
index 71cfe15712..2a37974cbb 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json
@@ -135,6 +135,8 @@
"ModificationTime": "Muutosaika",
"PasswordUpdateTime": "Salasanan päivityksen aika",
"LockoutEndTime": "Lukituksen päättymisaika",
- "FailedAccessCount": "Epäonnistuneet käyttöoikeudet"
+ "FailedAccessCount": "Epäonnistuneet käyttöoikeudet",
+ "UserResourcePermissionProviderKeyLookupService": "Käyttäjä",
+ "RoleResourcePermissionProviderKeyLookupService": "Rooli"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json
index 61bc1dea98..323bb5927a 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Heure de fin du verrouillage",
"FailedAccessCount": "Nombre d'accès ayant échoué",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Exiger la vérification de l'e-mail pour s'inscrire",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Les comptes d’utilisateurs ne seront pas créés à moins qu’ils ne vérifient leurs adresses e-mail."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Les comptes d’utilisateurs ne seront pas créés à moins qu’ils ne vérifient leurs adresses e-mail.",
+ "UserResourcePermissionProviderKeyLookupService": "Utilisateur",
+ "RoleResourcePermissionProviderKeyLookupService": "Rôle"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json
index 464426cf34..0d5fca3dde 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json
@@ -135,6 +135,8 @@
"ModificationTime": "संशोधन का समय",
"PasswordUpdateTime": "पासवर्ड अद्यतन समय",
"LockoutEndTime": "तालाबंदी समाप्ति समय",
- "FailedAccessCount": "विफल पहुंच गणना"
+ "FailedAccessCount": "विफल पहुंच गणना",
+ "UserResourcePermissionProviderKeyLookupService": "उपयोगकर्ता",
+ "RoleResourcePermissionProviderKeyLookupService": "भूमिका"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json
index e8af421629..0e73aa5f1e 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json
@@ -135,6 +135,8 @@
"ModificationTime": "Vrijeme izmjene",
"PasswordUpdateTime": "Vrijeme ažuriranja lozinke",
"LockoutEndTime": "Vrijeme završetka zaključavanja",
- "FailedAccessCount": "Broj neuspjelih pristupa"
+ "FailedAccessCount": "Broj neuspjelih pristupa",
+ "UserResourcePermissionProviderKeyLookupService": "Korisnik",
+ "RoleResourcePermissionProviderKeyLookupService": "Uloga"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json
index 935a59e2f5..730a831d23 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json
@@ -135,6 +135,8 @@
"ModificationTime": "Módosítási idő",
"PasswordUpdateTime": "A jelszó frissítési ideje",
"LockoutEndTime": "A zárolás befejezési ideje",
- "FailedAccessCount": "Sikertelen hozzáférések száma"
+ "FailedAccessCount": "Sikertelen hozzáférések száma",
+ "UserResourcePermissionProviderKeyLookupService": "Felhasználó",
+ "RoleResourcePermissionProviderKeyLookupService": "Szerep"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json
index ebf43ceab3..da53a10657 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json
@@ -135,6 +135,8 @@
"ModificationTime": "Breytingartími",
"PasswordUpdateTime": "Uppfærslutími lykilorðs",
"LockoutEndTime": "Lokatími lokunar",
- "FailedAccessCount": "Misheppnuð fjöldi aðgangs"
+ "FailedAccessCount": "Misheppnuð fjöldi aðgangs",
+ "UserResourcePermissionProviderKeyLookupService": "Notandi",
+ "RoleResourcePermissionProviderKeyLookupService": "Hlutverk"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json
index 1d1d9771fd..163ff98754 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Ora di fine del blocco",
"FailedAccessCount": "Conteggio accessi non riusciti",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Richiedi verifica email per la registrazione",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Gli account utente non verranno creati a meno che non verifichino i loro indirizzi email."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Gli account utente non verranno creati a meno che non verifichino i loro indirizzi email.",
+ "UserResourcePermissionProviderKeyLookupService": "Utente",
+ "RoleResourcePermissionProviderKeyLookupService": "Ruolo"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json
index 2b405697ae..9836137c80 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Eindtijd uitsluiting",
"FailedAccessCount": "Aantal mislukte toegangen",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "E-mailverificatie vereisen voor registratie",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Gebruikersaccounts worden niet aangemaakt tenzij ze hun e-mailadressen verifiëren."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Gebruikersaccounts worden niet aangemaakt tenzij ze hun e-mailadressen verifiëren.",
+ "UserResourcePermissionProviderKeyLookupService": "Gebruiker",
+ "RoleResourcePermissionProviderKeyLookupService": "Rol"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json
index c3c8053556..18f33d89c1 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Czas zakończenia blokady",
"FailedAccessCount": "Liczba nieudanych dostępów",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Wymagaj weryfikacji e-mail do rejestracji",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Konta użytkowników nie zostaną utworzone, dopóki nie zweryfikują swoich adresów e-mail."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Konta użytkowników nie zostaną utworzone, dopóki nie zweryfikują swoich adresów e-mail.",
+ "UserResourcePermissionProviderKeyLookupService": "Użytkownik",
+ "RoleResourcePermissionProviderKeyLookupService": "Rola"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json
index 40ef80556f..cd796edbde 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json
@@ -135,6 +135,8 @@
"ModificationTime": "Hora da modificação",
"PasswordUpdateTime": "Hora de atualização da senha",
"LockoutEndTime": "Hora de término do bloqueio",
- "FailedAccessCount": "Contagem de acessos com falha"
+ "FailedAccessCount": "Contagem de acessos com falha",
+ "UserResourcePermissionProviderKeyLookupService": "Usuário",
+ "RoleResourcePermissionProviderKeyLookupService": "Perfil"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json
index efe0c53541..3ebc98d179 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json
@@ -135,6 +135,8 @@
"ModificationTime": "Timp de modificare",
"PasswordUpdateTime": "Ora actualizării parolei",
"LockoutEndTime": "Ora de încheiere a blocării",
- "FailedAccessCount": "Număr de acces eșuat"
+ "FailedAccessCount": "Număr de acces eșuat",
+ "UserResourcePermissionProviderKeyLookupService": "Utilizator",
+ "RoleResourcePermissionProviderKeyLookupService": "Rol"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json
index 6afaf14b1a..f9ddb814d4 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Время окончания блокировки",
"FailedAccessCount": "Количество неудачных попыток доступа",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Требовать подтверждение электронной почты для регистрации",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Учетные записи пользователей не будут созданы, пока они не подтвердят свои адреса электронной почты."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Учетные записи пользователей не будут созданы, пока они не подтвердят свои адреса электронной почты.",
+ "UserResourcePermissionProviderKeyLookupService": "Пользователь",
+ "RoleResourcePermissionProviderKeyLookupService": "Роль"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json
index e529910a5e..26486aa6ab 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json
@@ -135,6 +135,8 @@
"ModificationTime": "Čas úpravy",
"PasswordUpdateTime": "Čas aktualizácie hesla",
"LockoutEndTime": "Čas ukončenia uzamknutia",
- "FailedAccessCount": "Počet neúspešných prístupov"
+ "FailedAccessCount": "Počet neúspešných prístupov",
+ "UserResourcePermissionProviderKeyLookupService": "Používateľ",
+ "RoleResourcePermissionProviderKeyLookupService": "Rola"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json
index c02577c385..8ae2a2f81b 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json
@@ -135,6 +135,8 @@
"ModificationTime": "Čas spreminjanja",
"PasswordUpdateTime": "Čas posodobitve gesla",
"LockoutEndTime": "Končni čas zaklepanja",
- "FailedAccessCount": "Število neuspešnih dostopov"
+ "FailedAccessCount": "Število neuspešnih dostopov",
+ "UserResourcePermissionProviderKeyLookupService": "Uporabnik",
+ "RoleResourcePermissionProviderKeyLookupService": "Vloga"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json
index 166f32a10a..aef65e2b11 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json
@@ -135,6 +135,8 @@
"ModificationTime": "Tid för modifiering",
"PasswordUpdateTime": "Uppdateringstid för lösenord",
"LockoutEndTime": "Sluttid för låsning",
- "FailedAccessCount": "Antal misslyckade åtkomster"
+ "FailedAccessCount": "Antal misslyckade åtkomster",
+ "UserResourcePermissionProviderKeyLookupService": "Användare",
+ "RoleResourcePermissionProviderKeyLookupService": "Roll"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json
index 2da62b0355..0a6e4d393c 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Kilitlenme bitiş zamanı",
"FailedAccessCount": "Başarısız giriş denemesi sayısı",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Kayıt için e-posta doğrulaması zorunlu kıl",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Kullanıcı hesapları, e-posta adreslerini doğrulamadıkça oluşturulmayacaktır."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Kullanıcı hesapları, e-posta adreslerini doğrulamadıkça oluşturulmayacaktır.",
+ "UserResourcePermissionProviderKeyLookupService": "Kullanıcı",
+ "RoleResourcePermissionProviderKeyLookupService": "Rol"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json
index a98baf6566..32c1dfe008 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "Thời gian kết thúc khóa",
"FailedAccessCount": "Số lượt truy cập không thành công",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Yêu cầu xác minh email để đăng ký",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Tài khoản người dùng sẽ không được tạo ra trừ khi họ xác minh địa chỉ email của mình."
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "Tài khoản người dùng sẽ không được tạo ra trừ khi họ xác minh địa chỉ email của mình.",
+ "UserResourcePermissionProviderKeyLookupService": "Người dùng",
+ "RoleResourcePermissionProviderKeyLookupService": "Vai trò"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json
index 0cfc117cf6..3a1239ddc7 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json
@@ -135,6 +135,8 @@
"ModificationTime": "修改时间",
"PasswordUpdateTime": "密码更新时间",
"LockoutEndTime": "锁定结束时间",
- "FailedAccessCount": "访问失败次数"
+ "FailedAccessCount": "访问失败次数",
+ "UserResourcePermissionProviderKeyLookupService": "用户",
+ "RoleResourcePermissionProviderKeyLookupService": "角色"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json
index 39f6fe5267..a28cc6c7d4 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json
@@ -135,6 +135,8 @@
"LockoutEndTime": "鎖定結束時間",
"FailedAccessCount": "訪問失敗次數",
"DisplayName:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "強制要求驗證電子郵件才能註冊",
- "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "除非驗證他們的電子郵件地址,否則不會創建用戶帳戶。"
+ "Description:Abp.Identity.SignIn.RequireEmailVerificationToRegister": "除非驗證他們的電子郵件地址,否則不會創建用戶帳戶。",
+ "UserResourcePermissionProviderKeyLookupService": "使用者",
+ "RoleResourcePermissionProviderKeyLookupService": "角色"
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/RoleFinderResult.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/RoleFinderResult.cs
new file mode 100644
index 0000000000..8fe118f13d
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/RoleFinderResult.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Volo.Abp.Identity;
+
+public class RoleFinderResult
+{
+ public Guid Id { get; set; }
+
+ public string RoleName { get; set; }
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/UserFinderResult.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/UserFinderResult.cs
new file mode 100644
index 0000000000..48ba5ace7a
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/UserFinderResult.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Volo.Abp.Identity;
+
+public class UserFinderResult
+{
+ public Guid Id { get; set; }
+
+ public string UserName { get; set; }
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs
index a9eefe019e..26bd8624b9 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs
@@ -31,11 +31,17 @@ public interface IIdentityRoleRepository : IBasicRepository
bool includeDetails = false,
CancellationToken cancellationToken = default
);
+
Task> GetListAsync(
IEnumerable ids,
CancellationToken cancellationToken = default
);
+ Task> GetListAsync(
+ IEnumerable names,
+ CancellationToken cancellationToken = default
+ );
+
Task> GetDefaultOnesAsync(
bool includeDetails = false,
CancellationToken cancellationToken = default
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs
index 3ec1b2fbb1..48d8b01a73 100644
--- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/UserRoleFinder.cs
@@ -1,16 +1,21 @@
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity;
public class UserRoleFinder : IUserRoleFinder, ITransientDependency
{
protected IIdentityUserRepository IdentityUserRepository { get; }
+ protected IIdentityRoleRepository IdentityRoleRepository { get; }
- public UserRoleFinder(IIdentityUserRepository identityUserRepository)
+ public UserRoleFinder(IIdentityUserRepository identityUserRepository, IIdentityRoleRepository identityRoleRepository)
{
IdentityUserRepository = identityUserRepository;
+ IdentityRoleRepository = identityRoleRepository;
}
[Obsolete("Use GetRoleNamesAsync instead.")]
@@ -19,8 +24,62 @@ public class UserRoleFinder : IUserRoleFinder, ITransientDependency
return (await IdentityUserRepository.GetRoleNamesAsync(userId)).ToArray();
}
- public async Task GetRoleNamesAsync(Guid userId)
+ public virtual async Task GetRoleNamesAsync(Guid userId)
{
return (await IdentityUserRepository.GetRoleNamesAsync(userId)).ToArray();
}
+
+ public virtual async Task> SearchUserAsync(string filter, int page = 1)
+ {
+ using (IdentityUserRepository.DisableTracking())
+ {
+ page = page < 1 ? 1 : page;
+ var users = await IdentityUserRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10);
+ return users.Select(user => new UserFinderResult
+ {
+ Id = user.Id,
+ UserName = user.UserName
+ }).ToList();
+ }
+ }
+
+ public virtual async Task> SearchRoleAsync(string filter, int page = 1)
+ {
+ using (IdentityUserRepository.DisableTracking())
+ {
+ page = page < 1 ? 1 : page;
+ var roles = await IdentityRoleRepository.GetListAsync(filter: filter, skipCount: (page - 1) * 10, maxResultCount: 10);
+ return roles.Select(user => new RoleFinderResult
+ {
+ Id = user.Id,
+ RoleName = user.Name
+ }).ToList();
+ }
+ }
+
+ public virtual async Task> SearchUserByIdsAsync(Guid[] ids)
+ {
+ using (IdentityUserRepository.DisableTracking())
+ {
+ var users = await IdentityUserRepository.GetListByIdsAsync(ids);
+ return users.Select(user => new UserFinderResult
+ {
+ Id = user.Id,
+ UserName = user.UserName
+ }).ToList();
+ }
+ }
+
+ public virtual async Task> SearchRoleByNamesAsync(string[] names)
+ {
+ using (IdentityUserRepository.DisableTracking())
+ {
+ var roles = await IdentityRoleRepository.GetListAsync(names);
+ return roles.Select(user => new RoleFinderResult
+ {
+ Id = user.Id,
+ RoleName = user.Name
+ }).ToList();
+ }
+ }
}
diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs
index ca6dc42d6f..1da7758f19 100644
--- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs
@@ -72,6 +72,13 @@ public class EfCoreIdentityRoleRepository : EfCoreRepository> GetListAsync(IEnumerable names, CancellationToken cancellationToken = default)
+ {
+ return await (await GetDbSetAsync())
+ .Where(t => names.Contains(t.Name))
+ .ToListAsync(GetCancellationToken(cancellationToken));
+ }
+
public virtual async Task> GetDefaultOnesAsync(
bool includeDetails = false, CancellationToken cancellationToken = default)
{
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs
index 1c2f1b61cb..ddbb2cfc55 100644
--- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/Volo/Abp/Identity/Integration/IdentityUserIntegrationClientProxy.Generated.cs
@@ -52,6 +52,14 @@ public partial class IdentityUserIntegrationClientProxy : ClientProxyBase> SearchByIdsAsync(Guid[] ids)
+ {
+ return await RequestAsync>(nameof(SearchByIdsAsync), new ClientProxyRequestTypeValue
+ {
+ { typeof(Guid[]), ids }
+ });
+ }
+
public virtual async Task GetCountAsync(UserLookupCountInputDto input)
{
return await RequestAsync(nameof(GetCountAsync), new ClientProxyRequestTypeValue
@@ -59,4 +67,28 @@ public partial class IdentityUserIntegrationClientProxy : ClientProxyBase> SearchRoleAsync(RoleLookupSearchInputDto input)
+ {
+ return await RequestAsync>(nameof(SearchRoleAsync), new ClientProxyRequestTypeValue
+ {
+ { typeof(RoleLookupSearchInputDto), input }
+ });
+ }
+
+ public virtual async Task> SearchRoleByNamesAsync(String[] names)
+ {
+ return await RequestAsync>(nameof(SearchRoleByNamesAsync), new ClientProxyRequestTypeValue
+ {
+ { typeof(String[]), names }
+ });
+ }
+
+ public virtual async Task GetRoleCountAsync(RoleLookupCountInputDto input)
+ {
+ return await RequestAsync(nameof(GetRoleCountAsync), new ClientProxyRequestTypeValue
+ {
+ { typeof(RoleLookupCountInputDto), input }
+ });
+ }
}
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json
index 33efd0a6e7..3937d99aa9 100644
--- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/ClientProxies/identity-generate-proxy.json
@@ -200,6 +200,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "ExtraProperties",
+ "jsonName": null,
+ "type": "Volo.Abp.Data.ExtraPropertyDictionary",
+ "typeSimple": "{string:object}",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
}
],
"returnValue": {
@@ -673,6 +685,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "ExtraProperties",
+ "jsonName": null,
+ "type": "Volo.Abp.Data.ExtraPropertyDictionary",
+ "typeSimple": "{string:object}",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
}
],
"returnValue": {
@@ -1220,6 +1244,18 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "ExtraProperties",
+ "jsonName": null,
+ "type": "Volo.Abp.Data.ExtraPropertyDictionary",
+ "typeSimple": "{string:object}",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
}
],
"returnValue": {
@@ -1348,6 +1384,23 @@
"typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
}
},
+ {
+ "name": "SearchByIdsAsync",
+ "parametersOnMethod": [
+ {
+ "name": "ids",
+ "typeAsString": "System.Guid[], System.Private.CoreLib",
+ "type": "System.Guid[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ }
+ },
{
"name": "GetCountAsync",
"parametersOnMethod": [
@@ -1364,6 +1417,57 @@
"type": "System.Int64",
"typeSimple": "number"
}
+ },
+ {
+ "name": "SearchRoleAsync",
+ "parametersOnMethod": [
+ {
+ "name": "input",
+ "typeAsString": "Volo.Abp.Identity.RoleLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts",
+ "type": "Volo.Abp.Identity.RoleLookupSearchInputDto",
+ "typeSimple": "Volo.Abp.Identity.RoleLookupSearchInputDto",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ }
+ },
+ {
+ "name": "SearchRoleByNamesAsync",
+ "parametersOnMethod": [
+ {
+ "name": "ids",
+ "typeAsString": "System.String[], System.Private.CoreLib",
+ "type": "System.String[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ }
+ },
+ {
+ "name": "GetRoleCountAsync",
+ "parametersOnMethod": [
+ {
+ "name": "input",
+ "typeAsString": "Volo.Abp.Identity.RoleLookupCountInputDto, Volo.Abp.Identity.Application.Contracts",
+ "type": "Volo.Abp.Identity.RoleLookupCountInputDto",
+ "typeSimple": "Volo.Abp.Identity.RoleLookupCountInputDto",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "returnValue": {
+ "type": "System.Int64",
+ "typeSimple": "number"
+ }
}
]
}
@@ -1544,6 +1648,55 @@
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "ExtraProperties",
+ "jsonName": null,
+ "type": "Volo.Abp.Data.ExtraPropertyDictionary",
+ "typeSimple": "{string:object}",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ },
+ "allowAnonymous": null,
+ "implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
+ },
+ "SearchByIdsAsyncByIds": {
+ "uniqueName": "SearchByIdsAsyncByIds",
+ "name": "SearchByIdsAsync",
+ "httpMethod": "GET",
+ "url": "integration-api/identity/users/search/by-ids",
+ "supportedVersions": [],
+ "parametersOnMethod": [
+ {
+ "name": "ids",
+ "typeAsString": "System.Guid[], System.Private.CoreLib",
+ "type": "System.Guid[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "parameters": [
+ {
+ "nameOnMethod": "ids",
+ "name": "ids",
+ "jsonName": null,
+ "type": "System.Guid[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": ""
}
],
"returnValue": {
@@ -1589,6 +1742,165 @@
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
+ },
+ "SearchRoleAsyncByInput": {
+ "uniqueName": "SearchRoleAsyncByInput",
+ "name": "SearchRoleAsync",
+ "httpMethod": "GET",
+ "url": "integration-api/identity/users/search/roles",
+ "supportedVersions": [],
+ "parametersOnMethod": [
+ {
+ "name": "input",
+ "typeAsString": "Volo.Abp.Identity.RoleLookupSearchInputDto, Volo.Abp.Identity.Application.Contracts",
+ "type": "Volo.Abp.Identity.RoleLookupSearchInputDto",
+ "typeSimple": "Volo.Abp.Identity.RoleLookupSearchInputDto",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "parameters": [
+ {
+ "nameOnMethod": "input",
+ "name": "Filter",
+ "jsonName": null,
+ "type": "System.String",
+ "typeSimple": "string",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "Sorting",
+ "jsonName": null,
+ "type": "System.String",
+ "typeSimple": "string",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "SkipCount",
+ "jsonName": null,
+ "type": "System.Int32",
+ "typeSimple": "number",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "MaxResultCount",
+ "jsonName": null,
+ "type": "System.Int32",
+ "typeSimple": "number",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ },
+ {
+ "nameOnMethod": "input",
+ "name": "ExtraProperties",
+ "jsonName": null,
+ "type": "Volo.Abp.Data.ExtraPropertyDictionary",
+ "typeSimple": "{string:object}",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ },
+ "allowAnonymous": null,
+ "implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
+ },
+ "SearchRoleByNamesAsyncByNames": {
+ "uniqueName": "SearchRoleByNamesAsyncByNames",
+ "name": "SearchRoleByNamesAsync",
+ "httpMethod": "GET",
+ "url": "integration-api/identity/users/search/roles/by-names",
+ "supportedVersions": [],
+ "parametersOnMethod": [
+ {
+ "name": "names",
+ "typeAsString": "System.String[], System.Private.CoreLib",
+ "type": "System.String[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "parameters": [
+ {
+ "nameOnMethod": "names",
+ "name": "names",
+ "jsonName": null,
+ "type": "System.String[]",
+ "typeSimple": "[string]",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": ""
+ }
+ ],
+ "returnValue": {
+ "type": "Volo.Abp.Application.Dtos.ListResultDto",
+ "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto"
+ },
+ "allowAnonymous": null,
+ "implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
+ },
+ "GetRoleCountAsyncByInput": {
+ "uniqueName": "GetRoleCountAsyncByInput",
+ "name": "GetRoleCountAsync",
+ "httpMethod": "GET",
+ "url": "integration-api/identity/users/count/roles",
+ "supportedVersions": [],
+ "parametersOnMethod": [
+ {
+ "name": "input",
+ "typeAsString": "Volo.Abp.Identity.RoleLookupCountInputDto, Volo.Abp.Identity.Application.Contracts",
+ "type": "Volo.Abp.Identity.RoleLookupCountInputDto",
+ "typeSimple": "Volo.Abp.Identity.RoleLookupCountInputDto",
+ "isOptional": false,
+ "defaultValue": null
+ }
+ ],
+ "parameters": [
+ {
+ "nameOnMethod": "input",
+ "name": "Filter",
+ "jsonName": null,
+ "type": "System.String",
+ "typeSimple": "string",
+ "isOptional": false,
+ "defaultValue": null,
+ "constraintTypes": null,
+ "bindingSourceId": "ModelBinding",
+ "descriptorName": "input"
+ }
+ ],
+ "returnValue": {
+ "type": "System.Int64",
+ "typeSimple": "number"
+ },
+ "allowAnonymous": null,
+ "implementFrom": "Volo.Abp.Identity.Integration.IIdentityUserIntegrationService"
}
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs
index 201c9f3eb0..ed7f0f5382 100644
--- a/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientUserRoleFinder.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@@ -25,8 +26,59 @@ public class HttpClientUserRoleFinder : IUserRoleFinder, ITransientDependency
return output.Items.Select(r => r.Name).ToArray();
}
- public async Task GetRoleNamesAsync(Guid userId)
+ public virtual async Task GetRoleNamesAsync(Guid userId)
{
return await _userIntegrationService.GetRoleNamesAsync(userId);
}
+
+ public virtual async Task> SearchUserAsync(string filter, int page = 1)
+ {
+ page = page < 1 ? 1 : page;
+ var users = await _userIntegrationService.SearchAsync(new UserLookupSearchInputDto()
+ {
+ Filter = filter,
+ SkipCount = (page - 1) * 10
+ });
+ return users.Items.Select(u => new UserFinderResult
+ {
+ Id = u.Id,
+ UserName = u.UserName
+ }).ToList();
+ }
+
+ public virtual async Task> SearchRoleAsync(string filter, int page = 1)
+ {
+ page = page < 1 ? 1 : page;
+ var roles = await _userIntegrationService.SearchRoleAsync(new RoleLookupSearchInputDto()
+ {
+ Filter = filter,
+ SkipCount = (page - 1) * 10
+ });
+
+ return roles.Items.Select(r => new RoleFinderResult
+ {
+ Id = r.Id,
+ RoleName = r.Name
+ }).ToList();
+ }
+
+ public virtual async Task> SearchUserByIdsAsync(Guid[] ids)
+ {
+ var users = await _userIntegrationService.SearchByIdsAsync(ids);
+ return users.Items.Select(u => new UserFinderResult
+ {
+ Id = u.Id,
+ UserName = u.UserName
+ }).ToList();
+ }
+
+ public virtual async Task> SearchRoleByNamesAsync(string[] names)
+ {
+ var roles = await _userIntegrationService.SearchRoleByNamesAsync(names);
+ return roles.Items.Select(r => new RoleFinderResult
+ {
+ Id = r.Id,
+ RoleName = r.Name
+ }).ToList();
+ }
}
diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs
index 2a84385e48..a30b73d5cd 100644
--- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs
+++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/Integration/IdentityUserIntegrationController.cs
@@ -20,7 +20,7 @@ public class IdentityUserIntegrationController : AbpControllerBase, IIdentityUse
{
UserIntegrationService = userIntegrationService;
}
-
+
[HttpGet]
[Route("{id}/role-names")]
public virtual Task GetRoleNamesAsync(Guid id)
@@ -49,10 +49,38 @@ public class IdentityUserIntegrationController : AbpControllerBase, IIdentityUse
return UserIntegrationService.SearchAsync(input);
}
+ [HttpGet]
+ [Route("search/by-ids")]
+ public virtual Task> SearchByIdsAsync(Guid[] ids)
+ {
+ return UserIntegrationService.SearchByIdsAsync(ids);
+ }
+
[HttpGet]
[Route("count")]
public Task GetCountAsync(UserLookupCountInputDto input)
{
return UserIntegrationService.GetCountAsync(input);
}
-}
\ No newline at end of file
+
+ [HttpGet]
+ [Route("search/roles")]
+ public virtual Task> SearchRoleAsync(RoleLookupSearchInputDto input)
+ {
+ return UserIntegrationService.SearchRoleAsync(input);
+ }
+
+ [HttpGet]
+ [Route("search/roles/by-names")]
+ public virtual Task> SearchRoleByNamesAsync(string[] names)
+ {
+ return UserIntegrationService.SearchRoleByNamesAsync(names);
+ }
+
+ [HttpGet]
+ [Route("count/roles")]
+ public virtual Task GetRoleCountAsync(RoleLookupCountInputDto input)
+ {
+ return UserIntegrationService.GetRoleCountAsync(input);
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs
index 7deee94160..f613a3ee88 100644
--- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs
+++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs
@@ -78,6 +78,13 @@ public class MongoIdentityRoleRepository : MongoDbRepository> GetListAsync(IEnumerable names, CancellationToken cancellationToken = default)
+ {
+ return await (await GetQueryableAsync(cancellationToken))
+ .Where(x => names.Contains(x.Name))
+ .ToListAsync(GetCancellationToken(cancellationToken));
+ }
+
public virtual async Task> GetDefaultOnesAsync(
bool includeDetails = false,
CancellationToken cancellationToken = default)
diff --git a/modules/identity/src/Volo.Abp.Identity.Web/wwwroot/client-proxies/identity-proxy.js b/modules/identity/src/Volo.Abp.Identity.Web/wwwroot/client-proxies/identity-proxy.js
index 250abbc47b..6de3aeb8d5 100644
--- a/modules/identity/src/Volo.Abp.Identity.Web/wwwroot/client-proxies/identity-proxy.js
+++ b/modules/identity/src/Volo.Abp.Identity.Web/wwwroot/client-proxies/identity-proxy.js
@@ -20,7 +20,7 @@
volo.abp.identity.identityRole.getList = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
- url: abp.appPath + 'api/identity/roles' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
+ url: abp.appPath + 'api/identity/roles' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }, { name: 'extraProperties', value: input.extraProperties }]) + '',
type: 'GET'
}, ajaxParams));
};
@@ -73,7 +73,7 @@
volo.abp.identity.identityUser.getList = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
- url: abp.appPath + 'api/identity/users' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
+ url: abp.appPath + 'api/identity/users' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }, { name: 'extraProperties', value: input.extraProperties }]) + '',
type: 'GET'
}, ajaxParams));
};
@@ -163,7 +163,7 @@
volo.abp.identity.identityUserLookup.search = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
- url: abp.appPath + 'api/identity/users/lookup/search' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
+ url: abp.appPath + 'api/identity/users/lookup/search' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }, { name: 'extraProperties', value: input.extraProperties }]) + '',
type: 'GET'
}, ajaxParams));
};
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs
index 973577ccff..43399a134d 100644
--- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs
@@ -1,4 +1,5 @@
using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
using Volo.Abp.Users;
@@ -22,6 +23,12 @@ public class AbpPermissionManagementDomainIdentityModule : AbpModule
//TODO: Can we prevent duplication of permission names without breaking the design and making the system complicated
options.ProviderPolicies[UserPermissionValueProvider.ProviderName] = "AbpIdentity.Users.ManagePermissions";
options.ProviderPolicies[RolePermissionValueProvider.ProviderName] = "AbpIdentity.Roles.ManagePermissions";
+
+ options.ResourceManagementProviders.Add();
+ options.ResourceManagementProviders.Add();
+
+ options.ResourcePermissionProviderKeyLookupServices.Add();
+ options.ResourcePermissionProviderKeyLookupServices.Add();
});
}
}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs
index cb63b2681a..82200f763f 100644
--- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs
@@ -1,5 +1,6 @@
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus;
@@ -14,15 +15,18 @@ public class RoleDeletedEventHandler :
ITransientDependency
{
protected IPermissionManager PermissionManager { get; }
+ protected IResourcePermissionManager ResourcePermissionManager { get; }
- public RoleDeletedEventHandler(IPermissionManager permissionManager)
+ public RoleDeletedEventHandler(IPermissionManager permissionManager, IResourcePermissionManager resourcePermissionManager)
{
PermissionManager = permissionManager;
+ ResourcePermissionManager = resourcePermissionManager;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityDeletedEto eventData)
{
await PermissionManager.DeleteAsync(RolePermissionValueProvider.ProviderName, eventData.Entity.Name);
+ await ResourcePermissionManager.DeleteAsync(RoleResourcePermissionValueProvider.ProviderName, eventData.Entity.Name);
}
}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs
index e97d524cd7..5cd2dda193 100644
--- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RolePermissionManagementProvider.cs
@@ -49,9 +49,8 @@ public class RolePermissionManagementProvider : PermissionManagementProvider
}
- if (providerName == UserPermissionValueProvider.ProviderName)
+ if (providerName == UserPermissionValueProvider.ProviderName && Guid.TryParse(providerKey, out var userId))
{
- var userId = Guid.Parse(providerKey);
var roleNames = await UserRoleFinder.GetRoleNamesAsync(userId);
foreach (var roleName in roleNames)
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionManagementProvider.cs
new file mode 100644
index 0000000000..bce070130c
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionManagementProvider.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions.Resources;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Guids;
+using Volo.Abp.Identity;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.PermissionManagement.Identity;
+
+public class RoleResourcePermissionManagementProvider : ResourcePermissionManagementProvider
+{
+ public override string Name => RoleResourcePermissionValueProvider.ProviderName;
+
+ protected IUserRoleFinder UserRoleFinder { get; }
+
+ public RoleResourcePermissionManagementProvider(
+ IResourcePermissionGrantRepository resourcepPrmissionGrantRepository,
+ IGuidGenerator guidGenerator,
+ ICurrentTenant currentTenant,
+ IUserRoleFinder userRoleFinder)
+ : base(
+ resourcepPrmissionGrantRepository,
+ guidGenerator,
+ currentTenant)
+ {
+ UserRoleFinder = userRoleFinder;
+ }
+
+ public override async Task CheckAsync(string name, string resourceName, string resourceKey, string providerName, string providerKey)
+ {
+ var multipleGrantInfo = await CheckAsync(new[] { name }, resourceName, resourceKey, providerName, providerKey);
+
+ return multipleGrantInfo.Result.Values.First();
+ }
+
+ public override async Task CheckAsync(string[] names, string resourceName, string resourceKey, string providerName, string providerKey)
+ {
+ using (ResourcePermissionGrantRepository.DisableTracking())
+ {
+ var multiplePermissionValueProviderGrantInfo = new MultipleResourcePermissionValueProviderGrantInfo(names);
+ var resourcePermissionGrants = new List();
+
+ if (providerName == Name)
+ {
+ resourcePermissionGrants.AddRange(await ResourcePermissionGrantRepository.GetListAsync(names, resourceName, resourceKey, providerName, providerKey));
+ }
+
+ if (providerName == UserResourcePermissionValueProvider.ProviderName && Guid.TryParse(providerKey, out var userId))
+ {
+ var roleNames = await UserRoleFinder.GetRoleNamesAsync(userId);
+
+ foreach (var roleName in roleNames)
+ {
+ resourcePermissionGrants.AddRange(await ResourcePermissionGrantRepository.GetListAsync(names, resourceName, resourceKey, Name, roleName));
+ }
+ }
+
+ resourcePermissionGrants = resourcePermissionGrants.Distinct().ToList();
+ if (!resourcePermissionGrants.Any())
+ {
+ return multiplePermissionValueProviderGrantInfo;
+ }
+
+ foreach (var permissionName in names)
+ {
+ var resourcePermissionGrant = resourcePermissionGrants.FirstOrDefault(x => x.Name == permissionName);
+ if (resourcePermissionGrant != null)
+ {
+ multiplePermissionValueProviderGrantInfo.Result[permissionName] = new ResourcePermissionValueProviderGrantInfo(true, resourcePermissionGrant.ProviderKey);
+ }
+ }
+
+ return multiplePermissionValueProviderGrantInfo;
+ }
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs
new file mode 100644
index 0000000000..fa9fc31f79
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleResourcePermissionProviderKeyLookupService.cs
@@ -0,0 +1,38 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions.Resources;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Identity;
+using Volo.Abp.Identity.Localization;
+using Volo.Abp.Localization;
+
+namespace Volo.Abp.PermissionManagement.Identity;
+
+public class RoleResourcePermissionProviderKeyLookupService : IResourcePermissionProviderKeyLookupService, ITransientDependency
+{
+ public string Name => RoleResourcePermissionValueProvider.ProviderName;
+
+ public ILocalizableString DisplayName { get; }
+
+ protected IUserRoleFinder UserRoleFinder { get; }
+
+ public RoleResourcePermissionProviderKeyLookupService(IUserRoleFinder userRoleFinder)
+ {
+ UserRoleFinder = userRoleFinder;
+ DisplayName = LocalizableString.Create(nameof(RoleResourcePermissionProviderKeyLookupService));
+ }
+
+ public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default)
+ {
+ var roles = await UserRoleFinder.SearchRoleAsync(filter, page);
+ return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList();
+ }
+
+ public virtual async Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
+ {
+ var roles = await UserRoleFinder.SearchRoleByNamesAsync(keys.Distinct().ToArray());
+ return roles.Select(r => new ResourcePermissionProviderKeyInfo(r.RoleName, r.RoleName)).ToList();
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs
index ca865063e0..bf9a86c06d 100644
--- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs
@@ -1,5 +1,6 @@
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Identity;
@@ -12,13 +13,19 @@ public class RoleUpdateEventHandler :
{
protected IPermissionManager PermissionManager { get; }
protected IPermissionGrantRepository PermissionGrantRepository { get; }
+ protected IResourcePermissionManager ResourcePermissionManager { get; }
+ protected IResourcePermissionGrantRepository ResourcePermissionGrantRepository { get; }
public RoleUpdateEventHandler(
IPermissionManager permissionManager,
- IPermissionGrantRepository permissionGrantRepository)
+ IPermissionGrantRepository permissionGrantRepository,
+ IResourcePermissionManager resourcePermissionManager,
+ IResourcePermissionGrantRepository resourcePermissionGrantRepository)
{
PermissionManager = permissionManager;
PermissionGrantRepository = permissionGrantRepository;
+ ResourcePermissionManager = resourcePermissionManager;
+ ResourcePermissionGrantRepository = resourcePermissionGrantRepository;
}
public async Task HandleEventAsync(IdentityRoleNameChangedEto eventData)
@@ -28,5 +35,11 @@ public class RoleUpdateEventHandler :
{
await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.Name);
}
+
+ var resourcePermissionGrantsInRole = await ResourcePermissionGrantRepository.GetListAsync(RoleResourcePermissionValueProvider.ProviderName, eventData.OldName);
+ foreach (var resourcePermissionGrant in resourcePermissionGrantsInRole)
+ {
+ await ResourcePermissionManager.UpdateProviderKeyAsync(resourcePermissionGrant, eventData.Name);
+ }
}
}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs
index 35aaba29ae..b10cef8fe4 100644
--- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs
@@ -1,5 +1,6 @@
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
@@ -13,15 +14,18 @@ public class UserDeletedEventHandler :
ITransientDependency
{
protected IPermissionManager PermissionManager { get; }
+ protected IResourcePermissionManager ResourcePermissionManager { get; }
- public UserDeletedEventHandler(IPermissionManager permissionManager)
+ public UserDeletedEventHandler(IPermissionManager permissionManager, IResourcePermissionManager resourcePermissionManager)
{
PermissionManager = permissionManager;
+ ResourcePermissionManager = resourcePermissionManager;
}
[UnitOfWork]
public virtual async Task HandleEventAsync(EntityDeletedEto eventData)
{
await PermissionManager.DeleteAsync(UserPermissionValueProvider.ProviderName, eventData.Entity.Id.ToString());
+ await ResourcePermissionManager.DeleteAsync(UserResourcePermissionValueProvider.ProviderName, eventData.Entity.Id.ToString());
}
}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionManagementProvider.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionManagementProvider.cs
new file mode 100644
index 0000000000..ef165d422d
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionManagementProvider.cs
@@ -0,0 +1,22 @@
+using Volo.Abp.Authorization.Permissions.Resources;
+using Volo.Abp.Guids;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.PermissionManagement.Identity;
+
+public class UserResourcePermissionManagementProvider : ResourcePermissionManagementProvider
+{
+ public override string Name => UserResourcePermissionValueProvider.ProviderName;
+
+ public UserResourcePermissionManagementProvider(
+ IResourcePermissionGrantRepository resourcePermissionGrantRepository,
+ IGuidGenerator guidGenerator,
+ ICurrentTenant currentTenant)
+ : base(
+ resourcePermissionGrantRepository,
+ guidGenerator,
+ currentTenant)
+ {
+
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs
new file mode 100644
index 0000000000..83f0e79099
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserResourcePermissionProviderKeyLookupService.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions.Resources;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Identity;
+using Volo.Abp.Identity.Localization;
+using Volo.Abp.Localization;
+
+namespace Volo.Abp.PermissionManagement.Identity;
+
+public class UserResourcePermissionProviderKeyLookupService : IResourcePermissionProviderKeyLookupService, ITransientDependency
+{
+ public string Name => UserResourcePermissionValueProvider.ProviderName;
+
+ public ILocalizableString DisplayName { get; }
+
+ protected IUserRoleFinder UserRoleFinder { get; }
+
+ public UserResourcePermissionProviderKeyLookupService(IUserRoleFinder userRoleFinder)
+ {
+ UserRoleFinder = userRoleFinder;
+ DisplayName = LocalizableString.Create(nameof(UserResourcePermissionProviderKeyLookupService));
+ }
+
+ public virtual async Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default)
+ {
+ var users = await UserRoleFinder.SearchUserAsync(filter, page);
+ return users.Select(u => new ResourcePermissionProviderKeyInfo(u.Id.ToString(), u.UserName)).ToList();
+ }
+
+ public virtual async Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default)
+ {
+ var ids = keys
+ .Select(key => Guid.TryParse(key, out var id) ? (Guid?)id : null)
+ .Where(id => id.HasValue)
+ .Select(id => id.Value)
+ .Distinct()
+ .ToArray();
+ var users = await UserRoleFinder.SearchUserByIdsAsync(ids.ToArray());
+ return users.Select(u => new ResourcePermissionProviderKeyInfo(u.Id.ToString(), u.UserName)).ToList();
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/RoleResourcePermissionManagerExtensions.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/RoleResourcePermissionManagerExtensions.cs
new file mode 100644
index 0000000000..53ff327f7b
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/RoleResourcePermissionManagerExtensions.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using Volo.Abp.Authorization.Permissions;
+
+namespace Volo.Abp.PermissionManagement;
+
+public static class RoleResourceresourcePermissionManagerExtensions
+{
+ public static Task GetForRoleAsync([NotNull] this IResourcePermissionManager resourcePermissionManager, string roleName, string permissionName, [NotNull] string resourceName, [NotNull] string resourceKey)
+ {
+ Check.NotNull(resourcePermissionManager, nameof(resourcePermissionManager));
+
+ return resourcePermissionManager.GetAsync(permissionName, resourceName, resourceKey, RolePermissionValueProvider.ProviderName, roleName);
+ }
+
+ public static Task> GetAllForRoleAsync([NotNull] this IResourcePermissionManager resourcePermissionManager, string roleName, [NotNull] string resourceName, [NotNull] string resourceKey)
+ {
+ Check.NotNull(resourcePermissionManager, nameof(resourcePermissionManager));
+
+ return resourcePermissionManager.GetAllAsync(resourceName, resourceKey, RolePermissionValueProvider.ProviderName, roleName);
+ }
+
+ public static Task SetForRoleAsync([NotNull] this IResourcePermissionManager resourcePermissionManager, string roleName, [NotNull] string permissionName, [NotNull] string resourceName, [NotNull] string resourceKey, bool isGranted)
+ {
+ Check.NotNull(resourcePermissionManager, nameof(resourcePermissionManager));
+
+ return resourcePermissionManager.SetAsync(permissionName, resourceName, resourceKey, RolePermissionValueProvider.ProviderName, roleName, isGranted);
+ }
+}
diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/UserResourcePermissionManagerExtensions.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/UserResourcePermissionManagerExtensions.cs
new file mode 100644
index 0000000000..c0fe2eb845
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/UserResourcePermissionManagerExtensions.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using Volo.Abp.Authorization.Permissions.Resources;
+
+namespace Volo.Abp.PermissionManagement;
+
+public static class UserResourcePermissionManagerExtensions
+{
+ public static Task> GetAllForUserAsync([NotNull] this IResourcePermissionManager resourcePermissionManager, Guid userId, [NotNull] string resourceName, [NotNull] string resourceKey)
+ {
+ Check.NotNull(resourcePermissionManager, nameof(resourcePermissionManager));
+
+ return resourcePermissionManager.GetAllAsync(resourceName, resourceKey, UserResourcePermissionValueProvider.ProviderName, userId.ToString());
+ }
+
+ public static Task SetForUserAsync([NotNull] this IResourcePermissionManager resourcePermissionManager, Guid userId, [NotNull] string name, [NotNull] string resourceName, [NotNull] string resourceKey, bool isGranted)
+ {
+ Check.NotNull(resourcePermissionManager, nameof(resourcePermissionManager));
+
+ return resourcePermissionManager.SetAsync(name, resourceName, resourceKey, UserResourcePermissionValueProvider.ProviderName, userId.ToString(), isGranted);
+ }
+}
diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs
index 524c7c25f3..56f9049b92 100644
--- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs
+++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/UserRoleFinder_Tests.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
using Shouldly;
using Xunit;
@@ -19,11 +16,47 @@ public class UserRoleFinder_Tests : AbpIdentityDomainTestBase
}
[Fact]
- public async Task GetRolesAsync()
+ public async Task GetRoleNamesAsync()
{
- var roleNames = await _userRoleFinder.GetRolesAsync(_testData.UserJohnId);
+ var roleNames = await _userRoleFinder.GetRoleNamesAsync(_testData.UserJohnId);
roleNames.ShouldNotBeEmpty();
roleNames.ShouldContain(x => x == "moderator");
roleNames.ShouldContain(x => x == "supporter");
}
+
+ [Fact]
+ public async Task SearchUserAsync()
+ {
+ var userResults = await _userRoleFinder.SearchUserAsync("john");
+ userResults.ShouldNotBeEmpty();
+ userResults.ShouldContain(x => x.Id == _testData.UserJohnId);
+ }
+
+ [Fact]
+ public async Task SearchRoleAsync()
+ {
+ var roleResults = await _userRoleFinder.SearchRoleAsync("moderator");
+ roleResults.ShouldNotBeEmpty();
+ roleResults.ShouldContain(x => x.RoleName == "moderator");
+ }
+
+ [Fact]
+ public async Task SearchUserByIdsAsync()
+ {
+ var userResults = await _userRoleFinder.SearchUserByIdsAsync(new[] { _testData.UserJohnId, _testData.UserBobId });
+ userResults.ShouldNotBeEmpty();
+ userResults.Count.ShouldBe(2);
+ userResults.ShouldContain(x => x.Id == _testData.UserJohnId && x.UserName == "john.nash");
+ userResults.ShouldContain(x => x.Id == _testData.UserBobId && x.UserName == "bob");
+ }
+
+ [Fact]
+ public async Task SearchRoleByNamesAsync()
+ {
+ var roleResults = await _userRoleFinder.SearchRoleByNamesAsync(new[] { "moderator", "manager" });
+ roleResults.ShouldNotBeEmpty();
+ roleResults.Count.ShouldBe(2);
+ roleResults.ShouldContain(x => x.RoleName == "moderator");
+ roleResults.ShouldContain(x => x.RoleName == "manager");
+ }
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionDefinitionListResultDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionDefinitionListResultDto.cs
new file mode 100644
index 0000000000..ea1ce882df
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionDefinitionListResultDto.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class GetResourcePermissionDefinitionListResultDto
+{
+ public List Permissions { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionListResultDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionListResultDto.cs
new file mode 100644
index 0000000000..b9c4db2190
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionListResultDto.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class GetResourcePermissionListResultDto
+{
+ public List Permissions { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionWithProviderListResultDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionWithProviderListResultDto.cs
new file mode 100644
index 0000000000..dcf4556d04
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionWithProviderListResultDto.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class GetResourcePermissionWithProviderListResultDto
+{
+ public List Permissions { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourceProviderListResultDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourceProviderListResultDto.cs
new file mode 100644
index 0000000000..ede31a6ca5
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourceProviderListResultDto.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class GetResourceProviderListResultDto
+{
+ public List Providers { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GrantedResourcePermissionDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GrantedResourcePermissionDto.cs
new file mode 100644
index 0000000000..bbb1de112a
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GrantedResourcePermissionDto.cs
@@ -0,0 +1,8 @@
+namespace Volo.Abp.PermissionManagement;
+
+public class GrantedResourcePermissionDto
+{
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs
index 819d643a21..dd24d436be 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs
@@ -11,4 +11,18 @@ public interface IPermissionAppService : IApplicationService
Task GetByGroupAsync([NotNull] string groupName, [NotNull] string providerName, [NotNull] string providerKey);
Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input);
+
+ Task GetResourceProviderKeyLookupServicesAsync(string resourceName);
+
+ Task SearchResourceProviderKeyAsync(string resourceName, string serviceName, string filter, int page);
+
+ Task GetResourceDefinitionsAsync([NotNull] string resourceName);
+
+ Task GetResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey);
+
+ Task GetResourceByProviderAsync([NotNull] string resourceName, [NotNull] string resourceKey, [NotNull] string providerName, [NotNull] string providerKey);
+
+ Task UpdateResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey, UpdateResourcePermissionsDto input);
+
+ Task DeleteResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey, [NotNull] string providerName, [NotNull] string providerKey);
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionDefinitionDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionDefinitionDto.cs
new file mode 100644
index 0000000000..b8218b562c
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionDefinitionDto.cs
@@ -0,0 +1,8 @@
+namespace Volo.Abp.PermissionManagement;
+
+public class ResourcePermissionDefinitionDto
+{
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionGrantInfoDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionGrantInfoDto.cs
new file mode 100644
index 0000000000..cf286815a5
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionGrantInfoDto.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class ResourcePermissionGrantInfoDto
+{
+ public string ProviderName { get; set; }
+
+ public string ProviderKey { get; set; }
+
+ public string ProviderDisplayName { get; set; }
+
+ public string ProviderNameDisplayName { get; set; }
+
+ public List Permissions { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionWithProdiverGrantInfoDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionWithProdiverGrantInfoDto.cs
new file mode 100644
index 0000000000..d56e217cd6
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionWithProdiverGrantInfoDto.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class ResourcePermissionWithProdiverGrantInfoDto
+{
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+
+ public List Providers { get; set; }
+
+ public bool IsGranted { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourceProviderDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourceProviderDto.cs
new file mode 100644
index 0000000000..98ee22c6b7
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourceProviderDto.cs
@@ -0,0 +1,8 @@
+namespace Volo.Abp.PermissionManagement;
+
+public class ResourceProviderDto
+{
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyInfo.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyInfo.cs
new file mode 100644
index 0000000000..efc6ae2b18
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyInfo.cs
@@ -0,0 +1,8 @@
+namespace Volo.Abp.PermissionManagement;
+
+public class SearchProviderKeyInfo
+{
+ public string ProviderKey { get; set; }
+
+ public string ProviderDisplayName { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyListResultDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyListResultDto.cs
new file mode 100644
index 0000000000..7fe4edd6e7
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/SearchProviderKeyListResultDto.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class SearchProviderKeyListResultDto
+{
+ public List Keys { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionsDto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionsDto.cs
new file mode 100644
index 0000000000..f82c27ff02
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionsDto.cs
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class UpdateResourcePermissionsDto
+{
+ public string ProviderName { get; set; }
+
+ public string ProviderKey { get; set; }
+
+ public List Permissions { get; set; }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
index e628c39644..e26e387fae 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
@@ -18,12 +18,18 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
{
protected PermissionManagementOptions Options { get; }
protected IPermissionManager PermissionManager { get; }
+ protected IPermissionChecker PermissionChecker { get; }
+ protected IResourcePermissionManager ResourcePermissionManager { get; }
+ protected IResourcePermissionGrantRepository ResourcePermissionGrantRepository { get; }
protected IPermissionDefinitionManager PermissionDefinitionManager { get; }
protected ISimpleStateCheckerManager SimpleStateCheckerManager { get; }
public PermissionAppService(
IPermissionManager permissionManager,
+ IPermissionChecker permissionChecker,
IPermissionDefinitionManager permissionDefinitionManager,
+ IResourcePermissionManager resourcePermissionManager,
+ IResourcePermissionGrantRepository resourcePermissionGrantRepository,
IOptions options,
ISimpleStateCheckerManager simpleStateCheckerManager)
{
@@ -32,6 +38,9 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
Options = options.Value;
PermissionManager = permissionManager;
+ PermissionChecker = permissionChecker;
+ ResourcePermissionManager = resourcePermissionManager;
+ ResourcePermissionGrantRepository = resourcePermissionGrantRepository;
PermissionDefinitionManager = permissionDefinitionManager;
SimpleStateCheckerManager = simpleStateCheckerManager;
}
@@ -160,6 +169,206 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
}
}
+ public virtual async Task GetResourceProviderKeyLookupServicesAsync(string resourceName)
+ {
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ if (!resourcePermissions.Any() ||
+ !await AuthorizationService.IsGrantedAnyAsync(resourcePermissions.Select(p => p.ManagementPermissionName!).ToArray()))
+ {
+ return new GetResourceProviderListResultDto
+ {
+ Providers = new List()
+ };
+ }
+
+ var lookupServices = await ResourcePermissionManager.GetProviderKeyLookupServicesAsync();
+ return new GetResourceProviderListResultDto
+ {
+ Providers = lookupServices.Select(s => new ResourceProviderDto
+ {
+ Name = s.Name,
+ DisplayName = s.DisplayName.Localize(StringLocalizerFactory),
+ }).ToList()
+ };
+ }
+
+ public virtual async Task SearchResourceProviderKeyAsync(string resourceName, string serviceName, string filter, int page)
+ {
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ if (resourcePermissions.IsNullOrEmpty() ||
+ !await AuthorizationService.IsGrantedAnyAsync(resourcePermissions.Select(p => p.ManagementPermissionName!).ToArray()))
+ {
+ return new SearchProviderKeyListResultDto();
+ }
+
+ var lookupService = await ResourcePermissionManager.GetProviderKeyLookupServiceAsync(serviceName);
+ var keys = await lookupService.SearchAsync(filter, page);
+ return new SearchProviderKeyListResultDto
+ {
+ Keys = keys.Select(x => new SearchProviderKeyInfo
+ {
+ ProviderKey = x.ProviderKey,
+ ProviderDisplayName = x.ProviderDisplayName,
+ }).ToList()
+ };
+ }
+
+ public virtual async Task GetResourceDefinitionsAsync(string resourceName)
+ {
+ var result = new GetResourcePermissionDefinitionListResultDto
+ {
+ Permissions = new List()
+ };
+
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ var permissionGrants = (await PermissionChecker.IsGrantedAsync(resourcePermissions
+ .Select(rp => rp.ManagementPermissionName!)
+ .Distinct().ToArray())).Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key)
+ .ToHashSet();
+ foreach (var resourcePermission in resourcePermissions)
+ {
+ if (!permissionGrants.Contains(resourcePermission.ManagementPermissionName))
+ {
+ continue;
+ }
+
+ result.Permissions.Add(new ResourcePermissionDefinitionDto
+ {
+ Name = resourcePermission.Name,
+ DisplayName = resourcePermission.DisplayName?.Localize(StringLocalizerFactory),
+ });
+ }
+
+ return result;
+ }
+
+ public virtual async Task GetResourceAsync(string resourceName, string resourceKey)
+ {
+ var result = new GetResourcePermissionListResultDto
+ {
+ Permissions = new List()
+ };
+
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ var resourcePermissionGrants = await ResourcePermissionManager.GetAllGroupAsync(resourceName, resourceKey);
+ var permissionGrants = (await PermissionChecker.IsGrantedAsync(resourcePermissions
+ .Select(rp => rp.ManagementPermissionName!)
+ .Distinct().ToArray())).Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key)
+ .ToHashSet();
+ foreach (var resourcePermissionGrant in resourcePermissionGrants)
+ {
+ var resourcePermissionGrantInfoDto = new ResourcePermissionGrantInfoDto
+ {
+ ProviderName = resourcePermissionGrant.ProviderName,
+ ProviderKey = resourcePermissionGrant.ProviderKey,
+ ProviderDisplayName = resourcePermissionGrant.ProviderDisplayName,
+ ProviderNameDisplayName = resourcePermissionGrant.ProviderNameDisplayName?.Localize(StringLocalizerFactory),
+ Permissions = new List()
+ };
+ foreach (var permission in resourcePermissionGrant.Permissions)
+ {
+ var resourcePermission = resourcePermissions.FirstOrDefault(x => x.Name == permission);
+ if (resourcePermission == null)
+ {
+ continue;
+ }
+
+ if (!permissionGrants.Contains(resourcePermission.ManagementPermissionName))
+ {
+ continue;
+ }
+
+ resourcePermissionGrantInfoDto.Permissions.Add(new GrantedResourcePermissionDto()
+ {
+ Name = permission,
+ DisplayName = resourcePermission?.DisplayName.Localize(StringLocalizerFactory),
+ });
+ }
+
+ if(resourcePermissionGrantInfoDto.Permissions.Any())
+ {
+ result.Permissions.Add(resourcePermissionGrantInfoDto);
+ }
+ }
+
+ return result;
+ }
+
+ public virtual async Task GetResourceByProviderAsync(string resourceName, string resourceKey, string providerName, string providerKey)
+ {
+ var result = new GetResourcePermissionWithProviderListResultDto
+ {
+ Permissions = new List()
+ };
+
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ var resourcePermissionGrants = await ResourcePermissionManager.GetAllAsync(resourceName, resourceKey, providerName, providerKey);
+ var permissionGrants = (await PermissionChecker.IsGrantedAsync(resourcePermissions
+ .Select(rp => rp.ManagementPermissionName!)
+ .Distinct().ToArray())).Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key)
+ .ToHashSet();
+ foreach (var resourcePermissionGrant in resourcePermissionGrants)
+ {
+ var resourcePermission = resourcePermissions.FirstOrDefault(x => x.Name == resourcePermissionGrant.Name);
+ if (resourcePermission == null)
+ {
+ continue;
+ }
+
+ if (!permissionGrants.Contains(resourcePermission.ManagementPermissionName))
+ {
+ continue;
+ }
+
+ result.Permissions.Add(new ResourcePermissionWithProdiverGrantInfoDto
+ {
+ Name = resourcePermissionGrant.Name,
+ DisplayName = resourcePermission?.DisplayName.Localize(StringLocalizerFactory),
+ Providers = resourcePermissionGrant.Providers.Select(x => x.Name).ToList(),
+ IsGranted = resourcePermissionGrant.IsGranted
+ });
+ }
+
+ return result;
+ }
+
+ public virtual async Task UpdateResourceAsync(string resourceName, string resourceKey, UpdateResourcePermissionsDto input)
+ {
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ var permissionGrants = (await PermissionChecker.IsGrantedAsync(resourcePermissions
+ .Select(rp => rp.ManagementPermissionName!)
+ .Distinct().ToArray())).Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key)
+ .ToHashSet();
+ foreach (var resourcePermission in resourcePermissions)
+ {
+ if (!permissionGrants.Contains(resourcePermission.ManagementPermissionName))
+ {
+ continue;
+ }
+
+ var isGranted = !input.Permissions.IsNullOrEmpty() && input.Permissions.Any(p => p == resourcePermission.Name);
+ await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, input.ProviderName, input.ProviderKey, isGranted);
+ }
+ }
+
+ public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
+ {
+ var resourcePermissions = await ResourcePermissionManager.GetAvailablePermissionsAsync(resourceName);
+ var permissionGrants = (await PermissionChecker.IsGrantedAsync(resourcePermissions
+ .Select(rp => rp.ManagementPermissionName!)
+ .Distinct().ToArray())).Result.Where(x => x.Value == PermissionGrantResult.Granted).Select(x => x.Key)
+ .ToHashSet();
+ foreach (var resourcePermission in resourcePermissions)
+ {
+ if (!permissionGrants.Contains(resourcePermission.ManagementPermissionName))
+ {
+ continue;
+ }
+
+ await ResourcePermissionManager.DeleteAsync(resourcePermission.Name, resourceName, resourceKey, providerName, providerKey);
+ }
+ }
+
protected virtual async Task CheckProviderPolicy(string providerName)
{
var policyName = Options.ProviderPolicies.GetOrDefault(providerName);
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor
new file mode 100644
index 0000000000..bd12891063
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor
@@ -0,0 +1,179 @@
+@using Blazorise.Components
+@using Volo.Abp.BlazoriseUI.Components
+@using Volo.Abp.PermissionManagement.Localization
+@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
+@inject AbpBlazorMessageLocalizerHelper LH
+
+
+
+
+ @L["ResourcePermissions"] - @ResourceDisplayName
+
+
+
+ @if(HasAnyResourcePermission && HasAnyResourceProviderKeyLookupService)
+ {
+
+
+
+
+
+
+
+
+
+ @L["Actions"]
+
+
+
+ @L["Edit"]
+
+
+ @L["Delete"]
+
+
+
+
+
+
+
+ @{
+
+ @context.ProviderName
+
+ @context.ProviderDisplayName
+ }
+
+
+
+
+ @{
+ foreach (var permission in context.Permissions)
+ {
+ @permission.DisplayName
+ }
+ }
+
+
+
+
+ @L["NoDataAvailableInDatatable"]
+
+
+ }
+ else
+ {
+
+ @if (!HasAnyResourcePermission)
+ {
+ @L["NoResourcePermissionFound"]
+ }
+ else if(!HasAnyResourceProviderKeyLookupService)
+ {
+ @L["NoResourceProviderKeyLookupServiceFound"]
+ }
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor.cs
new file mode 100644
index 0000000000..a69eacea3c
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/ResourcePermissionManagementModal.razor.cs
@@ -0,0 +1,317 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Blazorise;
+using Blazorise.Components;
+using Microsoft.AspNetCore.Components;
+using Volo.Abp.AspNetCore.Components.Messages;
+using Volo.Abp.PermissionManagement.Localization;
+
+namespace Volo.Abp.PermissionManagement.Blazor.Components;
+
+public partial class ResourcePermissionManagementModal
+{
+ [Inject] protected IPermissionAppService PermissionAppService { get; set; }
+
+ [Inject] protected IUiMessageService UiMessageService { get; set; }
+
+ protected Modal Modal { get; set; }
+
+ public bool HasAnyResourcePermission { get; set; }
+ public bool HasAnyResourceProviderKeyLookupService { get; set; }
+ protected string ResourceName { get; set; }
+ protected string ResourceKey { get; set; }
+ protected string ResourceDisplayName { get; set; }
+ protected int PageSize { get; set; } = 10;
+
+ protected Modal CreateModal { get; set; }
+ protected Validations CreateValidationsRef { get; set; }
+ protected CreateModel CreateEntity { get; set; } = new CreateModel
+ {
+ Permissions = []
+ };
+ protected Autocomplete ProviderKeyAutocompleteRef { get; set; }
+ protected Blazorise.Validation ProviderKeyValidationRef { get; set; }
+ public GetResourcePermissionDefinitionListResultDto ResourcePermissionDefinitions { get; set; } = new()
+ {
+ Permissions = []
+ };
+ protected string CurrentLookupService { get; set; }
+ protected string ProviderKey { get; set; }
+ protected string ProviderDisplayName { get; set; }
+ protected List ResourceProviderKeyLookupServices { get; set; } = new();
+ protected List ProviderKeys { get; set; } = new();
+ protected GetResourcePermissionListResultDto ResourcePermissionList = new()
+ {
+ Permissions = []
+ };
+
+ protected Validations EditValidationsRef { get; set; }
+ protected Modal EditModal { get; set; }
+ protected EditModel EditEntity { get; set; } = new EditModel
+ {
+ Permissions = []
+ };
+
+ public ResourcePermissionManagementModal()
+ {
+ LocalizationResource = typeof(AbpPermissionManagementResource);
+ }
+
+ public virtual async Task OpenAsync(string resourceName, string resourceKey, string resourceDisplayName)
+ {
+ try
+ {
+ ResourceName = resourceName;
+ ResourceKey = resourceKey;
+ ResourceDisplayName = resourceDisplayName;
+
+ ResourcePermissionDefinitions = await PermissionAppService.GetResourceDefinitionsAsync(ResourceName);
+ ResourceProviderKeyLookupServices = (await PermissionAppService.GetResourceProviderKeyLookupServicesAsync(ResourceName)).Providers;
+
+ HasAnyResourcePermission = ResourcePermissionDefinitions.Permissions.Any();
+ if (HasAnyResourcePermission)
+ {
+ HasAnyResourceProviderKeyLookupService = ResourceProviderKeyLookupServices.Count > 0;
+ }
+
+ await InvokeAsync(StateHasChanged);
+
+ ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName, ResourceKey);
+
+ await Modal.Show();
+
+ }
+ catch (Exception ex)
+ {
+ await HandleErrorAsync(ex);
+ }
+ }
+
+ protected virtual async Task CloseModal()
+ {
+ await Modal.Hide();
+ }
+
+ protected virtual Task ClosingModal(ModalClosingEventArgs eventArgs)
+ {
+ eventArgs.Cancel = eventArgs.CloseReason == CloseReason.FocusLostClosing;
+ return Task.CompletedTask;
+ }
+
+ protected virtual async Task OpenCreateModalAsync()
+ {
+ CurrentLookupService = ResourceProviderKeyLookupServices.FirstOrDefault()?.Name;
+
+ ProviderKey = null;
+ ProviderDisplayName = null;
+ ProviderKeys = new List();
+ await ProviderKeyAutocompleteRef.Clear();
+ await CreateValidationsRef.ClearAll();
+
+ CreateEntity = new CreateModel
+ {
+ Permissions = ResourcePermissionDefinitions.Permissions.Select(x => new ResourcePermissionModel
+ {
+ Name = x.Name,
+ DisplayName = x.DisplayName,
+ IsGranted = false
+ }).ToList()
+ };
+
+ await CreateModal.Show();
+ await InvokeAsync(StateHasChanged);
+ }
+
+ protected virtual async Task SelectedProviderKeyAsync(string value)
+ {
+ ProviderKey = value;
+ ProviderDisplayName = ProviderKeys.FirstOrDefault(p => p.ProviderKey == value)?.ProviderDisplayName;
+
+ var permissionGrants = await PermissionAppService.GetResourceByProviderAsync(ResourceName, ResourceKey, CurrentLookupService, ProviderKey);
+ foreach (var permission in CreateEntity.Permissions)
+ {
+ permission.IsGranted = permissionGrants.Permissions.Any(p => p.Name == permission.Name && p.Providers.Contains(CurrentLookupService) && p.IsGranted);
+ }
+
+ await InvokeAsync(StateHasChanged);
+ }
+
+ private async Task SearchProviderKeyAsync(AutocompleteReadDataEventArgs autocompleteReadDataEventArgs)
+ {
+ if ( !autocompleteReadDataEventArgs.CancellationToken.IsCancellationRequested )
+ {
+ if (autocompleteReadDataEventArgs.SearchValue.IsNullOrWhiteSpace())
+ {
+ ProviderKeys = new List();
+ return;
+ }
+
+ ProviderKeys = (await PermissionAppService.SearchResourceProviderKeyAsync(ResourceName, CurrentLookupService, autocompleteReadDataEventArgs.SearchValue, 1)).Keys;
+
+ await InvokeAsync(StateHasChanged);
+ }
+ }
+
+ protected virtual async Task OnPermissionCheckedChanged(ResourcePermissionModel permission, bool value)
+ {
+ permission.IsGranted = value;
+ await InvokeAsync(StateHasChanged);
+ }
+
+ protected virtual async Task GrantAllAsync(bool value)
+ {
+ foreach (var permission in CreateEntity.Permissions)
+ {
+ permission.IsGranted = value;
+ }
+
+ foreach (var permission in EditEntity.Permissions)
+ {
+ permission.IsGranted = value;
+ }
+
+ await InvokeAsync(StateHasChanged);
+ }
+
+ protected virtual async Task OpenEditModalAsync(ResourcePermissionGrantInfoDto permission)
+ {
+ var resourcePermissions = await PermissionAppService.GetResourceByProviderAsync(ResourceName, ResourceKey, permission.ProviderName, permission.ProviderKey);
+ EditEntity = new EditModel
+ {
+ ProviderName = permission.ProviderName,
+ ProviderKey = permission.ProviderKey,
+ Permissions = resourcePermissions.Permissions.Select(x => new ResourcePermissionModel
+ {
+ Name = x.Name,
+ DisplayName = x.DisplayName,
+ IsGranted = x.IsGranted
+ }).ToList()
+ };
+
+ await EditModal.Show();
+ }
+
+ protected virtual Task ClosingCreateModal(ModalClosingEventArgs eventArgs)
+ {
+ eventArgs.Cancel = eventArgs.CloseReason == CloseReason.FocusLostClosing;
+ return Task.CompletedTask;
+ }
+
+ protected virtual Task ClosingEditModal(ModalClosingEventArgs eventArgs)
+ {
+ eventArgs.Cancel = eventArgs.CloseReason == CloseReason.FocusLostClosing;
+ return Task.CompletedTask;
+ }
+
+ protected virtual async Task CloseCreateModalAsync()
+ {
+ await CreateModal.Hide();
+ }
+
+ protected virtual async Task CloseEditModalAsync()
+ {
+ await EditModal.Hide();
+ }
+
+ protected virtual async Task OnLookupServiceCheckedValueChanged(string value)
+ {
+ CurrentLookupService = value;
+ ProviderKey = null;
+ ProviderDisplayName = null;
+ await ProviderKeyAutocompleteRef.Clear();
+ await CreateValidationsRef.ClearAll();
+ await InvokeAsync(StateHasChanged);
+ }
+
+ protected virtual void ValidateProviderKey(ValidatorEventArgs validatorEventArgs)
+ {
+ validatorEventArgs.Status = ProviderKey.IsNullOrWhiteSpace()
+ ? ValidationStatus.Error
+ : ValidationStatus.Success;
+ validatorEventArgs.ErrorText = L["ThisFieldIsRequired."];
+ }
+
+ protected virtual async Task CreateResourcePermissionAsync()
+ {
+ if (await CreateValidationsRef.ValidateAll())
+ {
+ await PermissionAppService.UpdateResourceAsync(
+ ResourceName,
+ ResourceKey,
+ new UpdateResourcePermissionsDto
+ {
+ ProviderName = CurrentLookupService,
+ ProviderKey = ProviderKey,
+ Permissions = CreateEntity.Permissions.Where(p => p.IsGranted).Select(p => p.Name).ToList()
+ }
+ );
+
+ await CloseCreateModalAsync();
+ ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName, ResourceKey);
+ await InvokeAsync(StateHasChanged);
+ }
+ }
+
+ protected virtual async Task UpdateResourcePermissionAsync()
+ {
+ if (await EditValidationsRef.ValidateAll())
+ {
+ await PermissionAppService.UpdateResourceAsync(
+ ResourceName,
+ ResourceKey,
+ new UpdateResourcePermissionsDto
+ {
+ ProviderName = EditEntity.ProviderName,
+ ProviderKey = EditEntity.ProviderKey,
+ Permissions = EditEntity.Permissions.Where(p => p.IsGranted).Select(p => p.Name).ToList()
+ }
+ );
+
+ await CloseEditModalAsync();
+ ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName, ResourceKey);
+ await InvokeAsync(StateHasChanged);
+ }
+ }
+
+ protected virtual async Task DeleteResourcePermissionAsync(ResourcePermissionGrantInfoDto permission)
+ {
+ if(await UiMessageService.Confirm(L["ResourcePermissionDeletionConfirmationMessage"]))
+ {
+ await PermissionAppService.DeleteResourceAsync(
+ ResourceName,
+ ResourceKey,
+ permission.ProviderName,
+ permission.ProviderKey
+ );
+
+ ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName, ResourceKey);
+ await Notify.Success(L["DeletedSuccessfully"]);
+ await InvokeAsync(StateHasChanged);
+ }
+ }
+
+ public class CreateModel
+ {
+ public List Permissions { get; set; }
+ }
+
+ public class EditModel
+ {
+ public string ProviderName { get; set; }
+
+ public string ProviderKey { get; set; }
+
+ public List Permissions { get; set; }
+ }
+
+ public class ResourcePermissionModel
+ {
+ public string Name { get; set; }
+
+ public string DisplayName { get; set; }
+
+ public bool IsGranted { get; set; }
+ }
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json
index 30f4b647e8..f234ef9068 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ar.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "تحديد الكل",
"SaveWithoutAnyPermissionsWarningMessage": "هل أنت متأكد أنك تريد الحفظ بدون أي أذونات؟",
"PermissionGroup": "مجموعة الأذونات",
- "Filter": "تصفية"
+ "Filter": "تصفية",
+ "ResourcePermissions": "الأذونات",
+ "ResourcePermissionTarget": "الهدف",
+ "ResourcePermissionPermissions": "الأذونات",
+ "AddResourcePermission": "إضافة إذن",
+ "ResourcePermissionDeletionConfirmationMessage": "هل أنت متأكد أنك تريد حذف جميع الأذونات؟",
+ "UpdateResourcePermission": "تحديث الإذن",
+ "GrantAllResourcePermissions": "منح الكل",
+ "NoResourceProviderKeyLookupServiceFound": "لم يتم العثور على خدمة البحث عن مفتاح المزود",
+ "NoResourcePermissionFound": "لا توجد أي أذونات محددة."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json
index 814b8e423c..2083a51da2 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/cs.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Vybrat vše",
"SaveWithoutAnyPermissionsWarningMessage": "Opravdu chcete ukládat bez jakýchkoli oprávnění?",
"PermissionGroup": "Skupina oprávnění",
- "Filter": "Filtr"
+ "Filter": "Filtr",
+ "ResourcePermissions": "Oprávnění",
+ "ResourcePermissionTarget": "Cíl",
+ "ResourcePermissionPermissions": "Oprávnění",
+ "AddResourcePermission": "Přidat oprávnění",
+ "ResourcePermissionDeletionConfirmationMessage": "Opravdu chcete smazat všechna oprávnění?",
+ "UpdateResourcePermission": "Aktualizovat oprávnění",
+ "GrantAllResourcePermissions": "Udělit vše",
+ "NoResourceProviderKeyLookupServiceFound": "Nebyla nalezena služba pro vyhledávání klíče poskytovatele zdrojů",
+ "NoResourcePermissionFound": "Pro aktuální prostředek není definováno žádné oprávnění."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json
index 7a40c5d4d4..65fb5b83d6 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Alle auswählen",
"SaveWithoutAnyPermissionsWarningMessage": "Sind Sie sicher, dass Sie ohne Berechtigungen speichern möchten?",
"PermissionGroup": "Berechtigungsgruppe",
- "Filter": "Filtern"
+ "Filter": "Filtern",
+ "ResourcePermissions": "Berechtigungen",
+ "ResourcePermissionTarget": "Ziel",
+ "ResourcePermissionPermissions": "Berechtigungen",
+ "AddResourcePermission": "Berechtigung hinzufügen",
+ "ResourcePermissionDeletionConfirmationMessage": "Sind Sie sicher, dass Sie alle Berechtigungen löschen möchten?",
+ "UpdateResourcePermission": "Berechtigung aktualisieren",
+ "GrantAllResourcePermissions": "Alle gewähren",
+ "NoResourceProviderKeyLookupServiceFound": "Es wurde kein Dienst zum Nachschlagen des Anbieterschlüssels gefunden",
+ "NoResourcePermissionFound": "Es ist keine Berechtigung definiert."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json
index 3449b7fab6..125d64e5dc 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/el.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Επιλογή όλων",
"SaveWithoutAnyPermissionsWarningMessage": "Είστε βέβαιοι ότι θέλετε να αποθηκεύσετε χωρίς δικαιώματα;",
"PermissionGroup": "Ομάδα δικαιωμάτων",
- "Filter": "Φίλτρο"
+ "Filter": "Φίλτρο",
+ "ResourcePermissions": "Δικαιώματα",
+ "ResourcePermissionTarget": "Στόχος",
+ "ResourcePermissionPermissions": "Δικαιώματα",
+ "AddResourcePermission": "Προσθήκη δικαιώματος",
+ "ResourcePermissionDeletionConfirmationMessage": "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα δικαιώματα;",
+ "UpdateResourcePermission": "Ενημέρωση δικαιώματος",
+ "GrantAllResourcePermissions": "Παραχώρηση όλων",
+ "NoResourceProviderKeyLookupServiceFound": "Δεν βρέθηκε υπηρεσία αναζήτησης κλειδιού παρόχου",
+ "NoResourcePermissionFound": "Δεν έχει οριστεί καμία άδεια."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json
index be6cbcd1f5..75d6509523 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Select all",
"SaveWithoutAnyPermissionsWarningMessage": "Are you sure you want to save without any permissions?",
"PermissionGroup": "Permission Group",
- "Filter": "Filter"
+ "Filter": "Filter",
+ "ResourcePermissions": "Permissions",
+ "ResourcePermissionTarget": "Target",
+ "ResourcePermissionPermissions": "Permissions",
+ "AddResourcePermission": "Add permission",
+ "ResourcePermissionDeletionConfirmationMessage": "Are you sure you want to delete all permissions?",
+ "UpdateResourcePermission": "Update permission",
+ "GrantAllResourcePermissions": "Grant all",
+ "NoResourceProviderKeyLookupServiceFound": "There is no provider key lookup service was found",
+ "NoResourcePermissionFound": "There is no permission defined."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json
index b8299d4e5b..f3dde4d6a6 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Select all",
"SaveWithoutAnyPermissionsWarningMessage": "Are you sure you want to save without any permissions?",
"PermissionGroup": "Permission Group",
- "Filter": "Filter"
+ "Filter": "Filter",
+ "ResourcePermissions": "Permissions",
+ "ResourcePermissionTarget": "Target",
+ "ResourcePermissionPermissions": "Permissions",
+ "AddResourcePermission": "Add permission",
+ "ResourcePermissionDeletionConfirmationMessage": "Are you sure you want to delete all permissions?",
+ "UpdateResourcePermission": "Update permission",
+ "GrantAllResourcePermissions": "Grant all",
+ "NoResourceProviderKeyLookupServiceFound": "There is no provider key lookup service was found",
+ "NoResourcePermissionFound": "There is no permission defined."
}
-}
\ No newline at end of file
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json
index 622883b259..1007ca87ef 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/es.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Seleccionar todo",
"SaveWithoutAnyPermissionsWarningMessage": "¿Estás seguro de que quieres guardar sin ningún permiso?",
"PermissionGroup": "Grupo de permisos",
- "Filter": "Filtrar"
+ "Filter": "Filtrar",
+ "ResourcePermissions": "Permisos",
+ "ResourcePermissionTarget": "Objetivo",
+ "ResourcePermissionPermissions": "Permisos",
+ "AddResourcePermission": "Agregar permiso",
+ "ResourcePermissionDeletionConfirmationMessage": "¿Está seguro de que desea eliminar todos los permisos?",
+ "UpdateResourcePermission": "Actualizar permiso",
+ "GrantAllResourcePermissions": "Conceder todos",
+ "NoResourceProviderKeyLookupServiceFound": "No se encontró ningún servicio de búsqueda de clave de proveedor",
+ "NoResourcePermissionFound": "No hay ningún permiso definido."
}
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json
index 7ea9a6c4f3..4d711f6542 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fa.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "انتخاب همه",
"SaveWithoutAnyPermissionsWarningMessage": "آیا مطمئن هستید که می خواهید بدون هیچ دسترسی ذخیره کنید؟",
"PermissionGroup": "گروه دسترسی",
- "Filter": "فیلتر"
+ "Filter": "فیلتر",
+ "ResourcePermissions": "دسترسیها",
+ "ResourcePermissionTarget": "هدف",
+ "ResourcePermissionPermissions": "دسترسیها",
+ "AddResourcePermission": "افزودن مجوز",
+ "ResourcePermissionDeletionConfirmationMessage": "آیا مطمئن هستید که میخواهید همه مجوزها را حذف کنید؟",
+ "UpdateResourcePermission": "بهروزرسانی مجوز",
+ "GrantAllResourcePermissions": "اعطای همه",
+ "NoResourceProviderKeyLookupServiceFound": "هیچ سرویس جستجوی کلید ارائهدهنده یافت نشد",
+ "NoResourcePermissionFound": "هیچ مجوزی تعریف نشده است."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json
index f9b828ade4..02bd697c43 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fi.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Valitse kaikki",
"SaveWithoutAnyPermissionsWarningMessage": "Haluatko varmasti tallentaa ilman käyttöoikeuksia?",
"PermissionGroup": "Käyttöoikeus",
- "Filter": "Suodatus"
+ "Filter": "Suodatus",
+ "ResourcePermissions": "Käyttöoikeudet",
+ "ResourcePermissionTarget": "Kohde",
+ "ResourcePermissionPermissions": "Käyttöoikeudet",
+ "AddResourcePermission": "Lisää käyttöoikeus",
+ "ResourcePermissionDeletionConfirmationMessage": "Haluatko varmasti poistaa kaikki käyttöoikeudet?",
+ "UpdateResourcePermission": "Päivitä käyttöoikeus",
+ "GrantAllResourcePermissions": "Myönnä kaikki",
+ "NoResourceProviderKeyLookupServiceFound": "Palveluntarjoajan avaimen hakupalvelua ei löytynyt",
+ "NoResourcePermissionFound": "Ei käyttöoikeuksia määritetty."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json
index 79f4e68377..d019936494 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/fr.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Sélectionner tous les",
"SaveWithoutAnyPermissionsWarningMessage": "Êtes-vous sûr de vouloir enregistrer sans aucune autorisation ?",
"PermissionGroup": "Groupe d'autorisations",
- "Filter": "Filtrer"
+ "Filter": "Filtrer",
+ "ResourcePermissions": "Autorisations",
+ "ResourcePermissionTarget": "Cible",
+ "ResourcePermissionPermissions": "Autorisations",
+ "AddResourcePermission": "Ajouter une autorisation",
+ "ResourcePermissionDeletionConfirmationMessage": "Êtes-vous sûr de vouloir supprimer toutes les autorisations ?",
+ "UpdateResourcePermission": "Mettre à jour l'autorisation",
+ "GrantAllResourcePermissions": "Accorder tout",
+ "NoResourceProviderKeyLookupServiceFound": "Aucun service de recherche de clé de fournisseur n'a été trouvé",
+ "NoResourcePermissionFound": "Aucune autorisation n'est définie."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json
index cdc030e8ef..141be77ce5 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hi.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "सभी का चयन करे",
"SaveWithoutAnyPermissionsWarningMessage": "क्या आप वाकई बिना किसी अनुमति के सहेजना चाहते हैं?",
"PermissionGroup": "अनुमति समूह",
- "Filter": "फ़िल्टर"
+ "Filter": "फ़िल्टर",
+ "ResourcePermissions": "अनुमतियाँ",
+ "ResourcePermissionTarget": "लक्ष्य",
+ "ResourcePermissionPermissions": "अनुमतियाँ",
+ "AddResourcePermission": "अनुमति जोड़ें",
+ "ResourcePermissionDeletionConfirmationMessage": "क्या आप वाकई सभी अनुमतियां हटाना चाहते हैं?",
+ "UpdateResourcePermission": "अनुमति अपडेट करें",
+ "GrantAllResourcePermissions": "सभी प्रदान करें",
+ "NoResourceProviderKeyLookupServiceFound": "कोई प्रदाता कुंजी खोज सेवा नहीं मिली",
+ "NoResourcePermissionFound": "कोई अनुमति परिभाषित नहीं है।"
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json
index 531d0a35d2..fb7129a678 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hr.json
@@ -1,13 +1,22 @@
{
- "culture": "hr",
- "texts": {
- "Permissions": "Dozvole",
- "OnlyProviderPermissons": "Samo ovaj pružatelj usluga",
- "All": "Svi",
- "SelectAllInAllTabs": "Dodijelite sva dopuštenja",
- "SelectAllInThisTab": "Odaberi sve",
- "SaveWithoutAnyPermissionsWarningMessage": "Jeste li sigurni da želite spremiti bez ikakvih dopuštenja?",
- "PermissionGroup": "Grupa dozvola",
- "Filter": "Filtriraj"
- }
+ "culture": "hr",
+ "texts": {
+ "Permissions": "Dozvole",
+ "OnlyProviderPermissons": "Samo ovaj pružatelj usluga",
+ "All": "Svi",
+ "SelectAllInAllTabs": "Dodijelite sva dopuštenja",
+ "SelectAllInThisTab": "Odaberi sve",
+ "SaveWithoutAnyPermissionsWarningMessage": "Jeste li sigurni da želite spremiti bez ikakvih dopuštenja?",
+ "PermissionGroup": "Grupa dozvola",
+ "Filter": "Filtriraj",
+ "ResourcePermissions": "Dozvole",
+ "ResourcePermissionTarget": "Cilj",
+ "ResourcePermissionPermissions": "Dozvole",
+ "AddResourcePermission": "Dodaj dozvolu",
+ "ResourcePermissionDeletionConfirmationMessage": "Jeste li sigurni da želite izbrisati sve dozvole?",
+ "UpdateResourcePermission": "Ažuriraj dozvolu",
+ "GrantAllResourcePermissions": "Dodijeli sve",
+ "NoResourceProviderKeyLookupServiceFound": "Nije pronađena usluga za pronalaženje ključa pružatelja",
+ "NoResourcePermissionFound": "Nijedna dozvola nije definirana."
+ }
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json
index 3177ef8fa7..9ef8822f63 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/hu.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Mindet kiválaszt",
"SaveWithoutAnyPermissionsWarningMessage": "Biztos, hogy engedélyek nélkül akar menteni?",
"PermissionGroup": "Engedélycsoport",
- "Filter": "Szűrő"
+ "Filter": "Szűrő",
+ "ResourcePermissions": "Engedélyek",
+ "ResourcePermissionTarget": "Cél",
+ "ResourcePermissionPermissions": "Engedélyek",
+ "AddResourcePermission": "Engedély hozzáadása",
+ "ResourcePermissionDeletionConfirmationMessage": "Biztosan törölni szeretné az összes engedélyt?",
+ "UpdateResourcePermission": "Engedély frissítése",
+ "GrantAllResourcePermissions": "Összes engedély megadása",
+ "NoResourceProviderKeyLookupServiceFound": "Nem található szolgáltató kulcs kereső szolgáltatás",
+ "NoResourcePermissionFound": "Nincs meghatározva engedély."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json
index 7db32eb99e..0510d8a1b8 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/is.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Velja allt",
"SaveWithoutAnyPermissionsWarningMessage": "Ertu viss um að þú viljir vista án nokkurra heimilda?",
"PermissionGroup": "Heimildahópur",
- "Filter": "Sía"
+ "Filter": "Sía",
+ "ResourcePermissions": "Heimildir",
+ "ResourcePermissionTarget": "Markmið",
+ "ResourcePermissionPermissions": "Heimildir",
+ "AddResourcePermission": "Bæta við heimild",
+ "ResourcePermissionDeletionConfirmationMessage": "Ertu viss um að þú viljir eyða öllum heimildum?",
+ "UpdateResourcePermission": "Uppfæra heimild",
+ "GrantAllResourcePermissions": "Veita allt",
+ "NoResourceProviderKeyLookupServiceFound": "Engin þjónusta fannst til að leita að lykli veitanda",
+ "NoResourcePermissionFound": "Engin heimild er skilgreind."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json
index e473c7b310..644eae25ee 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/it.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Seleziona tutto",
"SaveWithoutAnyPermissionsWarningMessage": "Sei sicuro di voler salvare senza alcuna autorizzazione?",
"PermissionGroup": "Gruppo di autorizzazioni",
- "Filter": "Filtro"
+ "Filter": "Filtro",
+ "ResourcePermissions": "Autorizzazioni",
+ "ResourcePermissionTarget": "Obiettivo",
+ "ResourcePermissionPermissions": "Autorizzazioni",
+ "AddResourcePermission": "Aggiungi autorizzazione",
+ "ResourcePermissionDeletionConfirmationMessage": "Sei sicuro di voler eliminare tutte le autorizzazioni?",
+ "UpdateResourcePermission": "Aggiorna autorizzazione",
+ "GrantAllResourcePermissions": "Concedi tutto",
+ "NoResourceProviderKeyLookupServiceFound": "Non è stato trovato alcun servizio di ricerca chiave del provider",
+ "NoResourcePermissionFound": "Non è definita alcuna autorizzazione."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json
index 4b928c4d03..b9af1b227b 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Selecteer alles",
"SaveWithoutAnyPermissionsWarningMessage": "Weet u zeker dat u zonder rechten wilt opslaan?",
"PermissionGroup": "Rechtengroep",
- "Filter": "Filter"
+ "Filter": "Filter",
+ "ResourcePermissions": "Rechten",
+ "ResourcePermissionTarget": "Doel",
+ "ResourcePermissionPermissions": "Rechten",
+ "AddResourcePermission": "Recht toevoegen",
+ "ResourcePermissionDeletionConfirmationMessage": "Weet u zeker dat u alle rechten wilt verwijderen?",
+ "UpdateResourcePermission": "Recht bijwerken",
+ "GrantAllResourcePermissions": "Alles toekennen",
+ "NoResourceProviderKeyLookupServiceFound": "Er is geen service gevonden voor het opzoeken van de sleutel van de provider",
+ "NoResourcePermissionFound": "Er is geen machtiging gedefinieerd."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json
index ee483651eb..9ba0bd5690 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pl-PL.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Zaznacz wszystkie",
"SaveWithoutAnyPermissionsWarningMessage": "Czy na pewno chcesz zapisać bez żadnych uprawnień?",
"PermissionGroup": "Grupa uprawnień",
- "Filter": "Filtr"
+ "Filter": "Filtr",
+ "ResourcePermissions": "Uprawnienia",
+ "ResourcePermissionTarget": "Cel",
+ "ResourcePermissionPermissions": "Uprawnienia",
+ "AddResourcePermission": "Dodaj uprawnienie",
+ "ResourcePermissionDeletionConfirmationMessage": "Czy na pewno chcesz usunąć wszystkie uprawnienia?",
+ "UpdateResourcePermission": "Zaktualizuj uprawnienie",
+ "GrantAllResourcePermissions": "Przyznaj wszystko",
+ "NoResourceProviderKeyLookupServiceFound": "Nie znaleziono usługi wyszukiwania klucza dostawcy",
+ "NoResourcePermissionFound": "Nie zdefiniowano żadnych uprawnień."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json
index 28231b227f..d9ceca3317 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/pt-BR.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Selecionar todos",
"SaveWithoutAnyPermissionsWarningMessage": "Tem certeza que deseja salvar sem nenhuma permissão?",
"PermissionGroup": "Grupo de permissão",
- "Filter": "Filtrar"
+ "Filter": "Filtrar",
+ "ResourcePermissions": "Permissões",
+ "ResourcePermissionTarget": "Alvo",
+ "ResourcePermissionPermissions": "Permissões",
+ "AddResourcePermission": "Adicionar permissão",
+ "ResourcePermissionDeletionConfirmationMessage": "Tem certeza de que deseja excluir todas as permissões?",
+ "UpdateResourcePermission": "Atualizar permissão",
+ "GrantAllResourcePermissions": "Conceder tudo",
+ "NoResourceProviderKeyLookupServiceFound": "Nenhum serviço de pesquisa de chave do provedor foi encontrado",
+ "NoResourcePermissionFound": "Nenhuma permissão foi definida."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json
index af7db26acb..25553f693b 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Selectează toate",
"SaveWithoutAnyPermissionsWarningMessage": "Sigur doriți să salvați fără nicio permisiune?",
"PermissionGroup": "Grup de permisiuni",
- "Filter": "Filtru"
+ "Filter": "Filtru",
+ "ResourcePermissions": "Permisiuni",
+ "ResourcePermissionTarget": "Țintă",
+ "ResourcePermissionPermissions": "Permisiuni",
+ "AddResourcePermission": "Adăugați permisiune",
+ "ResourcePermissionDeletionConfirmationMessage": "Sigur doriți să ștergeți toate permisiunile?",
+ "UpdateResourcePermission": "Actualizați permisiunea",
+ "GrantAllResourcePermissions": "Acordați toate",
+ "NoResourceProviderKeyLookupServiceFound": "Nu a fost găsit niciun serviciu de căutare a cheii furnizorului",
+ "NoResourcePermissionFound": "Nu există nicio permisiune definită."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json
index 6041357b0e..409460e2dd 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ru.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Выбрать все",
"SaveWithoutAnyPermissionsWarningMessage": "Вы уверены, что хотите сохранить без каких-либо разрешений?",
"PermissionGroup": "Группа разрешений",
- "Filter": "Фильтр"
+ "Filter": "Фильтр",
+ "ResourcePermissions": "Разрешения",
+ "ResourcePermissionTarget": "Цель",
+ "ResourcePermissionPermissions": "Разрешения",
+ "AddResourcePermission": "Добавить разрешение",
+ "ResourcePermissionDeletionConfirmationMessage": "Вы уверены, что хотите удалить все разрешения?",
+ "UpdateResourcePermission": "Обновить разрешение",
+ "GrantAllResourcePermissions": "Предоставить все",
+ "NoResourceProviderKeyLookupServiceFound": "Служба поиска ключа поставщика не найдена",
+ "NoResourcePermissionFound": "Не определено ни одного разрешения."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json
index c079b8eba1..09394f87a9 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sk.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Vybrať všetky",
"SaveWithoutAnyPermissionsWarningMessage": "Naozaj chcete ukladať bez akýchkoľvek povolení?",
"PermissionGroup": "Skupina oprávnení",
- "Filter": "Filtrovať"
+ "Filter": "Filtrovať",
+ "ResourcePermissions": "Oprávnenia",
+ "ResourcePermissionTarget": "Cieľ",
+ "ResourcePermissionPermissions": "Oprávnenia",
+ "AddResourcePermission": "Pridať oprávnenie",
+ "ResourcePermissionDeletionConfirmationMessage": "Naozaj chcete odstrániť všetky oprávnenia?",
+ "UpdateResourcePermission": "Aktualizovať oprávnenie",
+ "GrantAllResourcePermissions": "Udeľ všetko",
+ "NoResourceProviderKeyLookupServiceFound": "Nebola nájdená služba na vyhľadávanie kľúča poskytovateľa",
+ "NoResourcePermissionFound": "Nie je definované žiadne povolenie."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json
index 9c906f7387..60ee9af67a 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sl.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Izberi vse",
"SaveWithoutAnyPermissionsWarningMessage": "Ali ste prepričani, da želite shraniti brez kakršnih koli dovoljenj?",
"PermissionGroup": "Skupina dovoljenj",
- "Filter": "Filtriraj"
+ "Filter": "Filtriraj",
+ "ResourcePermissions": "Dovoljenja",
+ "ResourcePermissionTarget": "Cilj",
+ "ResourcePermissionPermissions": "Dovoljenja",
+ "AddResourcePermission": "Dodaj dovoljenje",
+ "ResourcePermissionDeletionConfirmationMessage": "Ali ste prepričani, da želite izbrisati vsa dovoljenja?",
+ "UpdateResourcePermission": "Posodobi dovoljenje",
+ "GrantAllResourcePermissions": "Dodeli vse",
+ "NoResourceProviderKeyLookupServiceFound": "Ni bilo mogoče najti storitve za iskanje ključa ponudnika",
+ "NoResourcePermissionFound": "Nobeno dovoljenje ni določeno."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json
index d46fca4dc4..a5c1260438 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Välj alla",
"SaveWithoutAnyPermissionsWarningMessage": "Är du säker på att du vill spara utan några behörigheter?",
"PermissionGroup": "Behörighetsgrupp",
- "Filter": "Filtrera"
+ "Filter": "Filtrera",
+ "ResourcePermissions": "Behörigheter",
+ "ResourcePermissionTarget": "Mål",
+ "ResourcePermissionPermissions": "Behörigheter",
+ "AddResourcePermission": "Lägg till behörighet",
+ "ResourcePermissionDeletionConfirmationMessage": "Är du säker på att du vill ta bort alla behörigheter?",
+ "UpdateResourcePermission": "Uppdatera behörighet",
+ "GrantAllResourcePermissions": "Bevilja alla",
+ "NoResourceProviderKeyLookupServiceFound": "Ingen tjänst för att söka efter leverantörsnyckel hittades",
+ "NoResourcePermissionFound": "Ingen behörighet är definierad."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json
index 960cd8cf02..b96baa2383 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/tr.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Hepsini seç",
"SaveWithoutAnyPermissionsWarningMessage": "Hiçbir izin olmadan kaydetmek istediğinize emin misiniz?",
"PermissionGroup": "İzin Grubu",
- "Filter": "Filtre"
+ "Filter": "Filtre",
+ "ResourcePermissions": "İzinler",
+ "ResourcePermissionTarget": "Hedef",
+ "ResourcePermissionPermissions": "İzinler",
+ "AddResourcePermission": "İzin ekle",
+ "ResourcePermissionDeletionConfirmationMessage": "Tüm izinleri silmek istediğinizden emin misiniz?",
+ "UpdateResourcePermission": "İzni güncelle",
+ "GrantAllResourcePermissions": "Tümünü ver",
+ "NoResourceProviderKeyLookupServiceFound": "Herhangi bir sağlayıcı anahtar arama hizmeti bulunamadı",
+ "NoResourcePermissionFound": "Herhangi bir izin tanımlı değil."
}
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json
index 5e9a9d8565..2a5aca86e1 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/vi.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "Chọn tất cả",
"SaveWithoutAnyPermissionsWarningMessage": "Bạn có chắc chắn muốn lưu mà không có bất kỳ quyền nào không?",
"PermissionGroup": "Nhóm quyền",
- "Filter": "Lọc"
+ "Filter": "Lọc",
+ "ResourcePermissions": "Quyền",
+ "ResourcePermissionTarget": "Mục tiêu",
+ "ResourcePermissionPermissions": "Quyền",
+ "AddResourcePermission": "Thêm quyền",
+ "ResourcePermissionDeletionConfirmationMessage": "Bạn có chắc chắn muốn xóa tất cả quyền không?",
+ "UpdateResourcePermission": "Cập nhật quyền",
+ "GrantAllResourcePermissions": "Cấp tất cả",
+ "NoResourceProviderKeyLookupServiceFound": "Không tìm thấy dịch vụ tra cứu khóa nhà cung cấp",
+ "NoResourcePermissionFound": "Không có quyền nào được định nghĩa."
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json
index df844ca2bf..bbd53f9606 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hans.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "全选",
"SaveWithoutAnyPermissionsWarningMessage": "您确定要在没有任何权限的情况下保存吗?",
"PermissionGroup": "权限组",
- "Filter": "过滤"
+ "Filter": "过滤",
+ "ResourcePermissions": "权限",
+ "ResourcePermissionTarget": "目标",
+ "ResourcePermissionPermissions": "权限",
+ "AddResourcePermission": "添加权限",
+ "ResourcePermissionDeletionConfirmationMessage": "您确定要删除所有权限吗?",
+ "UpdateResourcePermission": "更新权限",
+ "GrantAllResourcePermissions": "授予所有",
+ "NoResourceProviderKeyLookupServiceFound": "未找到提供者键查找服务",
+ "NoResourcePermissionFound": "未定义任何权限。"
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json
index 72af56c960..c081c54f20 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/zh-Hant.json
@@ -8,6 +8,15 @@
"SelectAllInThisTab": "全選",
"SaveWithoutAnyPermissionsWarningMessage": "您確定要在沒有任何權限的情況下保存嗎?",
"PermissionGroup": "權限組",
- "Filter": "過濾"
+ "Filter": "過濾",
+ "ResourcePermissions": "權限",
+ "ResourcePermissionTarget": "目標",
+ "ResourcePermissionPermissions": "權限",
+ "AddResourcePermission": "添加權限",
+ "ResourcePermissionDeletionConfirmationMessage": "您確定要刪除所有權限嗎?",
+ "UpdateResourcePermission": "更新權限",
+ "GrantAllResourcePermissions": "授予所有",
+ "NoResourceProviderKeyLookupServiceFound": "未找到提供者鍵查找服務",
+ "NoResourcePermissionFound": "未定義任何權限。"
}
}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionDefinitionRecordConsts.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionDefinitionRecordConsts.cs
index 93b1b465c6..0aadef7940 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionDefinitionRecordConsts.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionDefinitionRecordConsts.cs
@@ -6,10 +6,14 @@ public class PermissionDefinitionRecordConsts
/// Default value: 128
///
public static int MaxNameLength { get; set; } = 128;
-
+
public static int MaxDisplayNameLength { get; set; } = 256;
public static int MaxProvidersLength { get; set; } = 128;
-
+
public static int MaxStateCheckersLength { get; set; } = 256;
-}
\ No newline at end of file
+
+ public static int MaxResourceNameLength { get; set; } = 256;
+
+ public static int MaxManagementPermissionNameLength { get; set; } = 128;
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionGrantConsts.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionGrantConsts.cs
index 630f5dc72e..d1008bcbdb 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionGrantConsts.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/PermissionGrantConsts.cs
@@ -11,4 +11,14 @@ public static class PermissionGrantConsts
/// Default value: 64
///
public static int MaxProviderKeyLength { get; set; } = 64;
+
+ ///
+ /// Default value: 256
+ ///
+ public static int MaxResourceNameLength { get; set; } = 256;
+
+ ///
+ /// Default value: 256
+ ///
+ public static int MaxResourceKeyLength { get; set; } = 256;
}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs
index f2e73cefc0..ff525ab263 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStore.cs
@@ -23,7 +23,7 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
protected IAbpDistributedLock DistributedLock { get; }
public PermissionManagementOptions PermissionManagementOptions { get; }
protected AbpDistributedCacheOptions CacheOptions { get; }
-
+
public DynamicPermissionDefinitionStore(
IPermissionGroupDefinitionRecordRepository permissionGroupRepository,
IPermissionDefinitionRecordRepository permissionRepository,
@@ -72,6 +72,34 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
}
}
+ public virtual async Task GetResourcePermissionOrNullAsync(string resourceName, string name)
+ {
+ if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
+ {
+ return null;
+ }
+
+ using (await StoreCache.SyncSemaphore.LockAsync())
+ {
+ await EnsureCacheIsUptoDateAsync();
+ return StoreCache.GetResourcePermissionOrNull(resourceName, name);
+ }
+ }
+
+ public virtual async Task> GetResourcePermissionsAsync()
+ {
+ if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
+ {
+ return Array.Empty();
+ }
+
+ using (await StoreCache.SyncSemaphore.LockAsync())
+ {
+ await EnsureCacheIsUptoDateAsync();
+ return StoreCache.GetResourcePermissions().ToImmutableList();
+ }
+ }
+
public virtual async Task> GetGroupsAsync()
{
if (!PermissionManagementOptions.IsDynamicPermissionStoreEnabled)
@@ -94,9 +122,9 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
/* We get the latest permission with a small delay for optimization */
return;
}
-
+
var stampInDistributedCache = await GetOrSetStampInDistributedCache();
-
+
if (stampInDistributedCache == StoreCache.CacheStamp)
{
StoreCache.LastCheckTime = DateTime.Now;
@@ -145,7 +173,7 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
}
stampInDistributedCache = Guid.NewGuid().ToString();
-
+
await DistributedCache.SetStringAsync(
cacheKey,
stampInDistributedCache,
@@ -163,9 +191,9 @@ public class DynamicPermissionDefinitionStore : IDynamicPermissionDefinitionStor
{
return $"{CacheOptions.KeyPrefix}_AbpInMemoryPermissionCacheStamp";
}
-
+
protected virtual string GetCommonDistributedLockKey()
{
return $"{CacheOptions.KeyPrefix}_Common_AbpPermissionUpdateLock";
}
-}
\ No newline at end of file
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs
index 1040ea84a0..15a98c84dd 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionStoreInMemoryCache.cs
@@ -18,6 +18,7 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
protected IDictionary PermissionGroupDefinitions { get; }
protected IDictionary PermissionDefinitions { get; }
+ protected IList ResourcePermissionDefinitions { get; }
protected ISimpleStateCheckerSerializer StateCheckerSerializer { get; }
protected ILocalizableStringSerializer LocalizableStringSerializer { get; }
@@ -34,6 +35,7 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
PermissionGroupDefinitions = new Dictionary();
PermissionDefinitions = new Dictionary();
+ ResourcePermissionDefinitions = new List();
}
public Task FillAsync(
@@ -42,9 +44,22 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
{
PermissionGroupDefinitions.Clear();
PermissionDefinitions.Clear();
+ ResourcePermissionDefinitions.Clear();
var context = new PermissionDefinitionContext(null);
+ var resourcePermissions = permissionRecords.Where(x => !x.ResourceName.IsNullOrWhiteSpace());
+ foreach (var resourcePermission in resourcePermissions)
+ {
+ context.AddResourcePermission(resourcePermission.Name,
+ resourcePermission.ResourceName,
+ resourcePermission.ManagementPermissionName,
+ resourcePermission.DisplayName != null ? LocalizableStringSerializer.Deserialize(resourcePermission.DisplayName) : null,
+ resourcePermission.MultiTenancySide,
+ resourcePermission.IsEnabled);
+ }
+
+ var permissions = permissionRecords.Where(x => x.ResourceName.IsNullOrWhiteSpace()).ToList();
foreach (var permissionGroupRecord in permissionGroupRecords)
{
var permissionGroup = context.AddGroup(
@@ -59,12 +74,12 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
permissionGroup[property.Key] = property.Value;
}
- var permissionRecordsInThisGroup = permissionRecords
+ var permissionRecordsInThisGroup = permissions
.Where(p => p.GroupName == permissionGroup.Name);
foreach (var permissionRecord in permissionRecordsInThisGroup.Where(x => x.ParentName == null))
{
- AddPermissionRecursively(permissionGroup, permissionRecord, permissionRecords);
+ AddPermissionRecursively(permissionGroup, permissionRecord, permissions);
}
}
@@ -86,6 +101,16 @@ public class DynamicPermissionDefinitionStoreInMemoryCache :
return PermissionGroupDefinitions.Values.ToList();
}
+ public PermissionDefinition GetResourcePermissionOrNull(string resourceName, string name)
+ {
+ return ResourcePermissionDefinitions.FirstOrDefault(p => p.ResourceName == resourceName && p.Name == name);
+ }
+
+ public IReadOnlyList GetResourcePermissions()
+ {
+ return ResourcePermissionDefinitions.ToList();
+ }
+
private void AddPermissionRecursively(ICanAddChildPermission permissionContainer,
PermissionDefinitionRecord permissionRecord,
List allPermissionRecords)
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IDynamicPermissionDefinitionStoreInMemoryCache.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IDynamicPermissionDefinitionStoreInMemoryCache.cs
index 2dab588ebd..eb079f6c76 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IDynamicPermissionDefinitionStoreInMemoryCache.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IDynamicPermissionDefinitionStoreInMemoryCache.cs
@@ -9,9 +9,9 @@ namespace Volo.Abp.PermissionManagement;
public interface IDynamicPermissionDefinitionStoreInMemoryCache
{
string CacheStamp { get; set; }
-
+
SemaphoreSlim SyncSemaphore { get; }
-
+
DateTime? LastCheckTime { get; set; }
Task FillAsync(
@@ -19,8 +19,12 @@ public interface IDynamicPermissionDefinitionStoreInMemoryCache
List permissionRecords);
PermissionDefinition GetPermissionOrNull(string name);
-
+
IReadOnlyList GetPermissions();
-
+
IReadOnlyList GetGroups();
-}
\ No newline at end of file
+
+ PermissionDefinition GetResourcePermissionOrNull(string resourceName, string name);
+
+ IReadOnlyList GetResourcePermissions();
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs
index 8ed09a4380..3c5f4a8783 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionDefinitionSerializer.cs
@@ -10,10 +10,13 @@ public interface IPermissionDefinitionSerializer
Task<(PermissionGroupDefinitionRecord[], PermissionDefinitionRecord[])>
SerializeAsync(IEnumerable permissionGroups);
+ Task SerializeAsync(
+ IEnumerable permissions);
+
Task SerializeAsync(
PermissionGroupDefinition permissionGroup);
Task SerializeAsync(
PermissionDefinition permission,
[CanBeNull] PermissionGroupDefinition permissionGroup);
-}
\ No newline at end of file
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs
index 7ec69ad100..ffb934321b 100644
--- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs
@@ -4,19 +4,39 @@ using JetBrains.Annotations;
namespace Volo.Abp.PermissionManagement;
-//TODO: Write extension methods for simple IsGranted check
-
public interface IPermissionManager
{
- Task GetAsync(string permissionName, string providerName, string providerKey);
-
- Task GetAsync(string[] permissionNames, string provideName, string providerKey);
-
- Task> GetAllAsync([NotNull] string providerName, [NotNull] string providerKey);
-
- Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted);
-
- Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey);
-
- Task DeleteAsync(string providerName, string providerKey);
-}
+ Task GetAsync(
+ string permissionName,
+ string providerName,
+ string providerKey
+ );
+
+ Task GetAsync(
+ string[] permissionNames,
+ string provideName,
+ string providerKey
+ );
+
+ Task> GetAllAsync(
+ [NotNull] string providerName,
+ [NotNull] string providerKey
+ );
+
+ Task SetAsync(
+ string permissionName,
+ string providerName,
+ string providerKey,
+ bool isGranted
+ );
+
+ Task UpdateProviderKeyAsync(
+ PermissionGrant permissionGrant,
+ string providerKey
+ );
+
+ Task DeleteAsync(
+ string providerName,
+ string providerKey
+ );
+}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionGrantRepository.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionGrantRepository.cs
new file mode 100644
index 0000000000..82060c7ea7
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionGrantRepository.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Domain.Repositories;
+
+namespace Volo.Abp.PermissionManagement;
+
+public interface IResourcePermissionGrantRepository : IBasicRepository
+{
+ Task FindAsync(
+ string name,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey,
+ CancellationToken cancellationToken = default
+ );
+
+ Task> GetListAsync(
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey,
+ CancellationToken cancellationToken = default
+ );
+
+ Task> GetListAsync(
+ string[] names,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey,
+ CancellationToken cancellationToken = default
+ );
+
+ Task> GetListAsync(
+ string providerName,
+ string providerKey,
+ CancellationToken cancellationToken = default
+ );
+
+ Task> GetPermissionsAsync(
+ string resourceName,
+ string resourceKey,
+ CancellationToken cancellationToken = default
+ );
+
+ Task> GetResourceKeys(
+ string resourceName,
+ string name,
+ CancellationToken cancellationToken = default
+ );
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManagementProvider.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManagementProvider.cs
new file mode 100644
index 0000000000..429e6f6e85
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManagementProvider.cs
@@ -0,0 +1,34 @@
+using System.Threading.Tasks;
+using JetBrains.Annotations;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.PermissionManagement;
+
+public interface IResourcePermissionManagementProvider : ISingletonDependency //TODO: Consider to remove this pre-assumption
+{
+ string Name { get; }
+
+ Task CheckAsync(
+ [NotNull] string name,
+ [NotNull] string resourceName,
+ [NotNull] string resourceKey,
+ [NotNull] string providerName,
+ [NotNull] string providerKey
+ );
+
+ Task CheckAsync(
+ [NotNull] string[] names,
+ [NotNull] string resourceName,
+ [NotNull] string resourceKey,
+ [NotNull] string providerName,
+ [NotNull] string providerKey
+ );
+
+ Task SetAsync(
+ [NotNull] string name,
+ [NotNull] string resourceName,
+ [NotNull] string resourceKey,
+ [NotNull] string providerKey,
+ bool isGranted
+ );
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs
new file mode 100644
index 0000000000..5bd2d143ca
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs
@@ -0,0 +1,81 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Authorization.Permissions;
+
+namespace Volo.Abp.PermissionManagement;
+
+public interface IResourcePermissionManager
+{
+ Task> GetProviderKeyLookupServicesAsync();
+
+ Task GetProviderKeyLookupServiceAsync(string providerName);
+
+ Task> GetAvailablePermissionsAsync(string resourceName);
+
+ Task GetAsync(
+ string permissionName,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey
+ );
+
+ Task GetAsync(
+ string[] permissionNames,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey
+ );
+
+ Task> GetAllAsync(
+ string resourceName,
+ string resourceKey
+ );
+
+ Task> GetAllAsync(
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey
+ );
+
+ Task> GetAllGroupAsync(
+ string resourceName,
+ string resourceKey
+ );
+
+ Task SetAsync(
+ string permissionName,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey,
+ bool isGranted
+ );
+
+ Task UpdateProviderKeyAsync(
+ ResourcePermissionGrant resourcePermissionGrant,
+ string providerKey
+ );
+
+ Task DeleteAsync(
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey
+ );
+
+ Task DeleteAsync(
+ string name,
+ string resourceName,
+ string resourceKey,
+ string providerName,
+ string providerKey
+ );
+
+ Task DeleteAsync(
+ string providerName,
+ string providerKey
+ );
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs
new file mode 100644
index 0000000000..aa6ad2a06e
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionProviderKeyLookupService.cs
@@ -0,0 +1,17 @@
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Localization;
+
+namespace Volo.Abp.PermissionManagement;
+
+public interface IResourcePermissionProviderKeyLookupService
+{
+ public string Name { get; }
+
+ public ILocalizableString DisplayName { get; }
+
+ Task> SearchAsync(string filter = null, int page = 1, CancellationToken cancellationToken = default);
+
+ Task> SearchAsync(string[] keys, CancellationToken cancellationToken = default);
+}
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/MultipleResourcePermissionValueProviderGrantInfo.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/MultipleResourcePermissionValueProviderGrantInfo.cs
new file mode 100644
index 0000000000..4ff1790488
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/MultipleResourcePermissionValueProviderGrantInfo.cs
@@ -0,0 +1,25 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.PermissionManagement;
+
+public class MultipleResourcePermissionValueProviderGrantInfo
+{
+ public Dictionary Result { get; }
+
+ public MultipleResourcePermissionValueProviderGrantInfo()
+ {
+ Result = new Dictionary