Skip to content

Commit f21ffe2

Browse files
committed
Add shared user account infrastructure.
1 parent a0cee6c commit f21ffe2

File tree

20 files changed

+781
-40
lines changed

20 files changed

+781
-40
lines changed
Lines changed: 270 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
using System;
2+
3+
namespace Volo.Abp.Data;
4+
5+
public static class DataFilterExtensions
6+
{
7+
private sealed class CompositeDisposable : IDisposable
8+
{
9+
private readonly IDisposable[] _disposables;
10+
private bool _disposed;
11+
12+
public CompositeDisposable(IDisposable[] disposables)
13+
{
14+
_disposables = disposables;
15+
}
16+
17+
public void Dispose()
18+
{
19+
if (_disposed)
20+
{
21+
return;
22+
}
23+
24+
_disposed = true;
25+
26+
foreach (var disposable in _disposables)
27+
{
28+
disposable?.Dispose();
29+
}
30+
}
31+
}
32+
33+
public static IDisposable Disable<T1, T2>(this IDataFilter filter)
34+
where T1 : class
35+
where T2 : class
36+
{
37+
return new CompositeDisposable(new[]
38+
{
39+
filter.Disable<T1>(),
40+
filter.Disable<T2>()
41+
});
42+
}
43+
44+
public static IDisposable Disable<T1, T2, T3>(this IDataFilter filter)
45+
where T1 : class
46+
where T2 : class
47+
where T3 : class
48+
{
49+
return new CompositeDisposable(new[]
50+
{
51+
filter.Disable<T1>(),
52+
filter.Disable<T2>(),
53+
filter.Disable<T3>()
54+
});
55+
}
56+
57+
public static IDisposable Disable<T1, T2, T3, T4>(this IDataFilter filter)
58+
where T1 : class
59+
where T2 : class
60+
where T3 : class
61+
where T4 : class
62+
{
63+
return new CompositeDisposable(new[]
64+
{
65+
filter.Disable<T1>(),
66+
filter.Disable<T2>(),
67+
filter.Disable<T3>(),
68+
filter.Disable<T4>()
69+
});
70+
}
71+
72+
public static IDisposable Disable<T1, T2, T3, T4, T5>(this IDataFilter filter)
73+
where T1 : class
74+
where T2 : class
75+
where T3 : class
76+
where T4 : class
77+
where T5 : class
78+
{
79+
return new CompositeDisposable(new[]
80+
{
81+
filter.Disable<T1>(),
82+
filter.Disable<T2>(),
83+
filter.Disable<T3>(),
84+
filter.Disable<T4>(),
85+
filter.Disable<T5>()
86+
});
87+
}
88+
89+
public static IDisposable Disable<T1, T2, T3, T4, T5, T6>(this IDataFilter filter)
90+
where T1 : class
91+
where T2 : class
92+
where T3 : class
93+
where T4 : class
94+
where T5 : class
95+
where T6 : class
96+
{
97+
return new CompositeDisposable(new[]
98+
{
99+
filter.Disable<T1>(),
100+
filter.Disable<T2>(),
101+
filter.Disable<T3>(),
102+
filter.Disable<T4>(),
103+
filter.Disable<T5>(),
104+
filter.Disable<T6>()
105+
});
106+
}
107+
108+
public static IDisposable Disable<T1, T2, T3, T4, T5, T6, T7>(this IDataFilter filter)
109+
where T1 : class
110+
where T2 : class
111+
where T3 : class
112+
where T4 : class
113+
where T5 : class
114+
where T6 : class
115+
where T7 : class
116+
{
117+
return new CompositeDisposable(new[]
118+
{
119+
filter.Disable<T1>(),
120+
filter.Disable<T2>(),
121+
filter.Disable<T3>(),
122+
filter.Disable<T4>(),
123+
filter.Disable<T5>(),
124+
filter.Disable<T6>(),
125+
filter.Disable<T7>()
126+
});
127+
}
128+
129+
public static IDisposable Disable<T1, T2, T3, T4, T5, T6, T7, T8>(this IDataFilter filter)
130+
where T1 : class
131+
where T2 : class
132+
where T3 : class
133+
where T4 : class
134+
where T5 : class
135+
where T6 : class
136+
where T7 : class
137+
where T8 : class
138+
{
139+
return new CompositeDisposable(new[]
140+
{
141+
filter.Disable<T1>(),
142+
filter.Disable<T2>(),
143+
filter.Disable<T3>(),
144+
filter.Disable<T4>(),
145+
filter.Disable<T5>(),
146+
filter.Disable<T6>(),
147+
filter.Disable<T7>(),
148+
filter.Disable<T8>()
149+
});
150+
}
151+
152+
public static IDisposable Enable<T1, T2>(this IDataFilter filter)
153+
where T1 : class
154+
where T2 : class
155+
{
156+
return new CompositeDisposable(new[]
157+
{
158+
filter.Enable<T1>(),
159+
filter.Enable<T2>()
160+
});
161+
}
162+
163+
public static IDisposable Enable<T1, T2, T3>(this IDataFilter filter)
164+
where T1 : class
165+
where T2 : class
166+
where T3 : class
167+
{
168+
return new CompositeDisposable(new[]
169+
{
170+
filter.Enable<T1>(),
171+
filter.Enable<T2>(),
172+
filter.Enable<T3>()
173+
});
174+
}
175+
176+
public static IDisposable Enable<T1, T2, T3, T4>(this IDataFilter filter)
177+
where T1 : class
178+
where T2 : class
179+
where T3 : class
180+
where T4 : class
181+
{
182+
return new CompositeDisposable(new[]
183+
{
184+
filter.Enable<T1>(),
185+
filter.Enable<T2>(),
186+
filter.Enable<T3>(),
187+
filter.Enable<T4>()
188+
});
189+
}
190+
191+
public static IDisposable Enable<T1, T2, T3, T4, T5>(this IDataFilter filter)
192+
where T1 : class
193+
where T2 : class
194+
where T3 : class
195+
where T4 : class
196+
where T5 : class
197+
{
198+
return new CompositeDisposable(new[]
199+
{
200+
filter.Enable<T1>(),
201+
filter.Enable<T2>(),
202+
filter.Enable<T3>(),
203+
filter.Enable<T4>(),
204+
filter.Enable<T5>()
205+
});
206+
}
207+
208+
public static IDisposable Enable<T1, T2, T3, T4, T5, T6>(this IDataFilter filter)
209+
where T1 : class
210+
where T2 : class
211+
where T3 : class
212+
where T4 : class
213+
where T5 : class
214+
where T6 : class
215+
{
216+
return new CompositeDisposable(new[]
217+
{
218+
filter.Enable<T1>(),
219+
filter.Enable<T2>(),
220+
filter.Enable<T3>(),
221+
filter.Enable<T4>(),
222+
filter.Enable<T5>(),
223+
filter.Enable<T6>()
224+
});
225+
}
226+
227+
public static IDisposable Enable<T1, T2, T3, T4, T5, T6, T7>(this IDataFilter filter)
228+
where T1 : class
229+
where T2 : class
230+
where T3 : class
231+
where T4 : class
232+
where T5 : class
233+
where T6 : class
234+
where T7 : class
235+
{
236+
return new CompositeDisposable(new[]
237+
{
238+
filter.Enable<T1>(),
239+
filter.Enable<T2>(),
240+
filter.Enable<T3>(),
241+
filter.Enable<T4>(),
242+
filter.Enable<T5>(),
243+
filter.Enable<T6>(),
244+
filter.Enable<T7>()
245+
});
246+
}
247+
248+
public static IDisposable Enable<T1, T2, T3, T4, T5, T6, T7, T8>(this IDataFilter filter)
249+
where T1 : class
250+
where T2 : class
251+
where T3 : class
252+
where T4 : class
253+
where T5 : class
254+
where T6 : class
255+
where T7 : class
256+
where T8 : class
257+
{
258+
return new CompositeDisposable(new[]
259+
{
260+
filter.Enable<T1>(),
261+
filter.Enable<T2>(),
262+
filter.Enable<T3>(),
263+
filter.Enable<T4>(),
264+
filter.Enable<T5>(),
265+
filter.Enable<T6>(),
266+
filter.Enable<T7>(),
267+
filter.Enable<T8>()
268+
});
269+
}
270+
}

framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ protected virtual bool ShouldFilterEntity<TEntity>(IMutableEntityType entityType
956956
return expression;
957957
}
958958

959-
protected virtual bool UseDbFunction()
959+
public virtual bool UseDbFunction()
960960
{
961961
return LazyServiceProvider != null && GlobalFilterOptions.Value.UseDbFunction && DbContextOptions.FindExtension<AbpDbContextOptionsExtension>() != null;
962962
}

framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/GlobalFilters/AbpCompiledQueryCacheKeyGenerator.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq.Expressions;
34
using Microsoft.EntityFrameworkCore.Infrastructure;
45
using Microsoft.EntityFrameworkCore.Query;
6+
using Microsoft.Extensions.DependencyInjection;
57

68
namespace Volo.Abp.EntityFrameworkCore.GlobalFilters;
79

@@ -23,7 +25,21 @@ public virtual object GenerateCacheKey(Expression query, bool async)
2325
var cacheKey = InnerCompiledQueryCacheKeyGenerator.GenerateCacheKey(query, async);
2426
if (CurrentContext.Context is IAbpEfCoreDbFunctionContext abpEfCoreDbFunctionContext)
2527
{
26-
return new AbpCompiledQueryCacheKey(cacheKey, abpEfCoreDbFunctionContext.GetCompiledQueryCacheKey());
28+
var abpCacheKey = abpEfCoreDbFunctionContext.GetCompiledQueryCacheKey();
29+
var cacheKeyProviders = abpEfCoreDbFunctionContext.LazyServiceProvider.GetService<IEnumerable<IAbpEfCoreCompiledQueryCacheKeyProvider>>();
30+
if (cacheKeyProviders != null)
31+
{
32+
foreach (var provider in cacheKeyProviders)
33+
{
34+
var key = provider.GetCompiledQueryCacheKey();
35+
if (!key.IsNullOrWhiteSpace())
36+
{
37+
abpCacheKey += $":{key}";
38+
}
39+
}
40+
}
41+
42+
return new AbpCompiledQueryCacheKey(cacheKey, abpCacheKey);
2743
}
2844

2945
return cacheKey;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace Volo.Abp.EntityFrameworkCore.GlobalFilters;
2+
3+
public interface IAbpEfCoreCompiledQueryCacheKeyProvider
4+
{
5+
string? GetCompiledQueryCacheKey();
6+
}

framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/GlobalFilters/IAbpEfCoreDbFunctionContext.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,7 @@ public interface IAbpEfCoreDbFunctionContext
1212

1313
IDataFilter DataFilter { get; }
1414

15+
bool UseDbFunction();
16+
1517
string GetCompiledQueryCacheKey();
1618
}

0 commit comments

Comments
 (0)