Kullanıcılar tablosuna bir TenantId alanı ekledik ancak bu, UserRow'da tanımlanmadı ve kullanıcı iletişim kutusunda görünmüyor.
Bu alan yalnızca yönetici kullanıcı tarafından görülüp düzenlenebilir . Diğer kullanıcıların, kiracı kullanıcılarını yönetmeleri için kullanıcılar sayfasına erişim vermemize rağmen bu bilgileri görememesi veya değiştirememesi gerekir.
İlk önce onu UserRow.cs'ye ekleyelim :
namespace MultiTenancy.Administration
{
//...
public sealed class UserRow : LoggingRow<UserRow.RowFields>, IIdRow, INameRow, IIsActiveRow
{
//...
[DisplayName("Last Directory Update"), Insertable(false), Updatable(false)]
public DateTime? LastDirectoryUpdate
{
get => Fields.LastDirectoryUpdate[this];
set => Fields.LastDirectoryUpdate[this] = value;
}
[DisplayName("Tenant"), ForeignKey("Tenants", "TenantId"), LeftJoin("tnt")]
[LookupEditor(typeof(TenantRow))]
public int? TenantId
{
get => Fields.TenantId[this];
set => Fields.TenantId[this] = value;
}
[DisplayName("Tenant"), Expression("tnt.TenantName")]
public string TenantName
{
get => Fields.TenantName[this];
set => Fields.TenantName[this] = value;
}
//...
public class RowFields : LoggingRowFields
{
//...
public DateTimeField LastDirectoryUpdate;
public Int32Field TenantId;
public StringField TenantName;
//...
}
}
}
Düzenlemek için onu UserForm.cs dosyasına eklememiz gerekiyor :
namespace MultiTenancy.Administration.Forms
{
using Serenity;
using Serenity.ComponentModel;
using System;
using System.ComponentModel;
[FormScript("Administration.User")]
[BasedOnRow(typeof(UserRow))]
public class UserForm
{
public string Username { get; set; }
public string DisplayName { get; set; }
[EmailEditor]
public string Email { get; set; }
[PasswordEditor]
public string Password { get; set; }
[PasswordEditor, OneWay]
public string PasswordConfirm { get; set; }
[OneWay]
public string Source { get; set; }
public int? TenantId { get; set; }
}
}
Kiracı seçimine yer açmak için site.css'de kullanıcı iletişim kutusunun boyutunu da biraz artırmanız gerekir :
.s-Administration-UserDialog > .size {
width: 650px;
}
.s-Administration-UserDialog .caption {
width: 150px;
}
.s-Administration-UserDialog .s-PropertyGrid .categories {
height: 470px;
}
Şimdi Kullanıcı Yönetimi sayfasını açın ve İkinci Kiracıya ait bir kiracı2 kullanıcısı oluşturun .

Bu kullanıcıyı oluşturduktan sonra izinlerini düzenleyin ve ona Kullanıcı, Rol Yönetimi ve İzinler izni verin, çünkü bu, İkinci Kiracı için yönetici kullanıcımız olacaktır .
Tenant2 ile Oturum Açma
Oturumu kapatın ve kiracı2 kullanıcısı ile oturum açın .
Kullanıcı Yönetimi sayfasını açtığınızda iki farklı durumla karşılaşabilirsiniz.
İlk durumda, kiracı2 kullanıcı iletişim kutusunu açabilir ve kendisinin ve diğer kullanıcıların kiracısını değiştirebilir. Tarayıcınız kiracı aramasını önbelleğe aldıysa bu durum meydana gelir.
İkinci durumda kiracı2'nin Kullanıcı iletişim kutusunu açamayacağını göreceksiniz . Bir kullanıcıya tıkladığınızda hiçbir şey olmuyor.
Tarayıcı konsolunu kontrol ederseniz (böyle bir şey meydana geldiğinde, öncelikle tarayıcı konsolunu hatalara karşı kontrol etmelisiniz), şöyle bir hata görürsünüz:

Bunun nedeni, TenantRow'umuzun, arama komut dosyası tarafından devralınan Yönetim:Tenants okuma iznine sahip olmasıdır.
Bu hatayı çözmek için kiracı arama komut dosyasının okuma iznini başka bir şeyle değiştirebiliriz, ancak bu durumda Tenant2 kendisinin ve admin dahil diğer herhangi bir kullanıcının kiracısını görebilir ve değiştirebilir .
İstediğimiz bu değildi.
Öncelikle diğer kiracıların kullanıcılarını görmesini engelleyelim.