private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(string roleId, string tenantId) { var cacheKey = roleId + "@" + (!string.IsNullOrEmpty(tenantId) ? tenantId : "default"); return(await cacheManager.GetRolePermissionCache().GetCancelableAsync(cacheKey, async(cancellationToken) => { var cacheItem = new RolePermissionCacheItem(roleId); var normalizedRoleId = KeyNormalizer.NormalizeName(roleId); var staticRole = options.Role.StaticRoles.FirstOrDefault(c => string.Equals(c.Id, normalizedRoleId, StringComparison.OrdinalIgnoreCase)); if (staticRole != null) { foreach (var permission in permissionStore.GetAll()) { if (staticRole.IsGrantedByDefault(permission)) { cacheItem.GrantedPermissions.Add(permission.Name); } } } else { var role = await Store.FindByIdAsync(normalizedRoleId, cancellationToken); if (role == null) { throw new StructureException("There is no role with given id: " + normalizedRoleId); } } if (Store is IRolePermissionStore <TRolePermission> rolePermissionStore) { foreach (var rolePermission in await rolePermissionStore.GetPermissionsAsync(normalizedRoleId, cancellationToken)) { if (rolePermission.IsGranted) { cacheItem.GrantedPermissions.AddIfNotContains(rolePermission.PermissionName); } else { cacheItem.GrantedPermissions.Remove(rolePermission.PermissionName); } } } return cacheItem; })); }
private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(int roleId) { var cacheKey = roleId + "@" + (AbpSession.TenantId ?? 0); return(await _cacheManager.GetRolePermissionCache().GetAsync(cacheKey, async() => { var newCacheItem = new RolePermissionCacheItem(roleId); foreach (var permissionInfo in await _rolePermissionRepository.GetAllListAsync(c => c.RoleId == roleId)) { if (permissionInfo.IsGranted) { newCacheItem.GrantedPermissions.Add(permissionInfo.Name); } } return newCacheItem; })); }
/// <summary> /// 获取用户角色权限缓存 /// </summary> /// <param name="id"></param> /// <returns></returns> public RolePermissionCacheItem GetRolePermissionCacheItem(int roleId) { var cacheKey = roleId + "@" + (GetCurrentTenantId() ?? 0); return(_cacheManager.GetRolePermissionCache().Get(cacheKey, _ => { var newCacheItem = new RolePermissionCacheItem(roleId); var permissions = _setrolepermissionRepository.GetAll() .Where(r => r.RoleId == roleId && r.IsGranted) .Select(r => r.Name) .ToList(); var list = _permissionManager.GetAllPermissions(); foreach (var permission in list.Where(l => permissions.Contains(l.Name))) { newCacheItem.GrantedPermissions.Add(permission.Name); } return newCacheItem; })); }
private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(int roleId) { var cacheKey = "role@" + roleId; return(await _cacheManager.GetRolePermissionCache().GetAsync(cacheKey, async() => { var newCacheItem = new RolePermissionCacheItem(roleId); foreach (var permissionInfo in await RolePermissionStore.GetPermissionsAsync(roleId)) { if (permissionInfo.IsGranted) { newCacheItem.GrantedPermissions.Add(permissionInfo.Name); } else { newCacheItem.ProhibitedPermissions.Add(permissionInfo.Name); } } return newCacheItem; })); }