Yeniden oluşturup başlattıktan sonra kullanıcı sayfası şu şekilde olacaktır:

Evet, artık yönetici kullanıcıyı göremiyor ama bir sorun var. tenant2 öğesine tıkladığınızda hiçbir şey olmayacak ve tarayıcı konsolunda "Komut dosyası verisi yüklenemiyor: Lookup.Administration.Tenant " hatası alacaksınız :
Bu hata, depo düzeyindeki son filtrelememizle ilgili değil. Geçerli kullanıcının Kiracılar tablosuna izni olmadığından bu arama komut dosyasını yükleyemiyor . Peki bunu en son (bir durumda) nasıl gördü?
Bunu görebiliyordu çünkü ilk önce yönetici olarak oturum açtık ve kullanıcı için düzenleme iletişim kutusunu açtığımızda bu arama komut dosyasını yükledik. Tarayıcı bunu önbelleğe aldı, bu nedenle tenant2 ile oturum açıp düzenleme iletişim kutusunu açtığımızda, kiracıları tarayıcı önbelleğinden yükledi.
Ancak bu sefer projeyi yeniden inşa ederken tarayıcı onu sunucudan yüklemeye çalıştı ve tenant2'nin bu izne sahip olmaması nedeniyle bu hatayı aldık. Sorun değil, bu izne sahip olmasını istemiyoruz ama bu hatadan nasıl kaçınılır?
Kiracı alanını kullanıcı formundan kaldırmamız gerekiyor . Ancak yönetici kullanıcı için bu alana ihtiyacımız var , dolayısıyla onu UserForm.cs'den silemeyiz . Bu nedenle bunu şartlı olarak yapmamız gerekiyor.
Projeyi oluşturun, hepsini otomatik olarak dönüştürün ve aşağıdaki yöntemi UserDialog.ts dosyasına ekleyin :
import { localText, Authorization } from "@serenity-is/corelib";
//...
protected getPropertyItems() {
var items = super.getPropertyItems();
if (!Authorization.hasPermission("Administration:Tenants"))
items = items.filter(x => x.name != UserRow.Fields.TenantId);
return items;
}
Dialogs, kendi formunda göstereceği alanların listesini getPropertyItems yöntemiyle alır ve bu da bunları sunucu tarafı form tanımından yükler.
Mevcut kullanıcının kiracı iznine sahip olmaması durumunda TenantId alanını hariç tutarız.
Bu, orijinal kullanıcı formunu değiştirmez, yalnızca bu iletişim kutusu örneğinin listesini değiştirir.
Kullanıcı kiracı2 artık kullanıcı iletişim kutusunu açabilir.