Ana içeriğe atla

Kullanıcı İletişim Kutusunda Kiracı Seçimi

 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 .

Kiracı2 Kullanıcısı

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:

Kiracı2 Giriş Yaptı

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.

Bu blogdaki popüler yayınlar

Code generetor ile oluşturulan dosyaların açıklamaları

  1. Sunum (Presentation/UI) Katmanı (Kullanıcı arayüzü - HTML, TypeScript, Dialog, Grid) 🔹 XYZPage.ts 📌 Ne İşe Yarar? Kullanıcı arayüzünün TypeScript tarafındaki tanımıdır. Serenity'nin Dialog ve Grid bileşenlerini içeren bir TypeScript sınıfıdır. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kullanıcıdan veri almak ve göstermek için kullanılır. 🔹 XYZGrid.ts 📌 Ne İşe Yarar? Tablo (Grid) yapısını oluşturur ve verileri listeler. Filtreleme, sıralama ve sayfalama işlemleri için kullanılır. columnsKey ile hangi kolonların gösterileceğini belirler. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kullanıcının verileri listelediği ve etkileşimde bulunduğu yerdir. 🔹 XYZDialog.ts 📌 Ne İşe Yarar? CRUD (Create, Read, Update, Delete) işlemlerini yöneten pencere (modal) bileşeni Kullanıcı form aracılığıyla veri ekler, günceller veya siler. XYZForm.cs ile birlikte çalışır. 📌 Çok Katmanlı Mimarideki Yeri: Sunum Katmanı (Presentation Layer) Kull...

Serenity Web Nedir?

   Serenity  , açık kaynak teknolojileri üzerine kurulu bir ASP.NET Core/TypeScript uygulama platformudur. Standart kodlardan kaçınarak, tekrarlanan görevlere harcanan zamanı azaltarak ve en iyi yazılım tasarımı uygulamalarını uygulayarak bakım maliyetlerini düşürürken geliştirmeyi kolaylaştırmayı amaçlamaktadır. Serene  , Serenity platformunu temel alan ücretsiz, açık kaynaklı başlangıç ​​uygulama şablonumuzdur.  Bu dokümantasyon aracılığıyla eğitimimiz ve diğer örnekler için esas olarak Serene'yi kullanacağız. StartSharp  , ücretli müşterilerimize sunduğumuz premium uygulama şablonudur.  Daha gösterişli bir temaya ve bazı ekstra özelliklere  ek olarak Serene'deki her şeyi içerir  .  İkisi de Serenity platformunu temel alıyor. Adında Ne Var Serenity'nin sözlük anlamları  barış  ,  rahatlık  ve  sakinliktir  . Serenity ile bunu başarmaya çalışıyoruz.  Umarız yükledikten ve kullandıktan sonra siz de bu ş...