Merhaba Arkadaşlar.

Kullanıcı Yetkilendirmesiyle ilgili bir sorunum var. Birkaç yöntem aklıma geliyor ama Daha iyi bir çözüm bulmak gerektiği için sizlere sorma ihtiyacı duydum.

Kullanıcılar ve Yetkiler tablom bulunmaktadır.

Kullanıcı Yetki Ver düğmesini tıkladıgımda (UserID=1) şeklinde UserID'sini gönderiyorum. Fakat Yetki Tablom Kullanıcılar altında oldugu için UserID'yi tutma konusunda iyi bir çözüm bulamadım.

Kısaca istediğim; UserID'yi Yetkiler Modeliyle beraber göndermek ve 2. ActionResult sonucunda da UserID'yi almak.

Aklıma gelen çözümler; ViewBag.UserId düşündüm ama daha iyi bir yolu olabilir dedim.. (Kullanıcı tablosunda ki ilgili Id'yi bulup,Yetkiyi oluşturmayı denedim başarılı olamadım.)

Kullanıcılar tablom.

[Table("Kullanicilar")]
public class Kullanicilar
{
    public Kullanicilar()
    {
       this.Yetkiler = new HashSet<Yetkiler>();

    }
    public int Id { get; set; }
    [Required(ErrorMessage="Kullanıcı Adı Zorunludur")]
    [StringLength(150, ErrorMessage = "{0} alanı en fazla {1}, en az {2} karakter uzunluğunda olmalıdır!", MinimumLength = 3)]
    [Display(Name = "Kullanıcı Adı",Prompt="K.Adı")]
    public string KullaniciAdi { get; set; }

    public virtual ICollection<Yetkiler> Yetkiler
    {
        get;
        set;
    }

Yetkiler tablom.

[Table("Yetkiler")]
public class Yetkiler
{

    [Key]
    public int YetkiKoduID { get; set; }
    public string YetkiAciklamasi
    {
        get;
        set;
    }
    public int YetkiKodu { get; set; }
    public virtual Kullanicilar Kullanicilar { get; set; }
}

Controllerim

       public ActionResult YetkiVer(int UserID)
        {
//            var YetkiVer = new Yetkiler();
  //          var K = MasterDB.Kullanicilar.Find(UserID);
          //  var Y = MasterDB.Yetkiler.Create().Kullanicilar.Id = UserID;
            var K = MasterDB.Kullanicilar.Find(UserID).Yetkiler;

            var Yetkiler = UyelikSistemi.Yetki.Where(o => o.Tur == GenelSistem.Uyelik.YetkiTipleri.Kullanici).ToList();
            ViewBag.Yetkiler = new SelectList(Yetkiler, "YetkiKodu", "YetkiAciklamasi");
            return View(K);
        }

        [HttpPost]
        public ActionResult YetkiVer(Yetkiler Y)
        {
            var K = MasterDB.Kullanicilar.Find(Y.Kullanicilar.Id);
            K.Yetkiler.Add(Y);
            MasterDB.SaveChanges();
            return View();
        }

soruldu: 04 Eyl '14, 12:55

r3boot's gravatar image

r3boot
20661017
cevap kabul oranı: 50%

1

@r3boot Lütfen acik, anlasilir soru basliklari kullanin!

Soruyu aciklayici teknolojileri de etiket olarak ekleyin!

BTSoru SSS: http://www.btsoru.com/faq/

(04 Eyl '14, 17:35) CemIkta ♦ CemIkta's gravatar image

Bir ayak oyunu ile hallettim. Yetki classını Kullanıcı ile beraber oluşturduktan sonra; Model'e bu şekilde yolladım.

Datayı Post ettikten sonra; Yetki (Y) classında ki Kullanici= NULL yaptıktan sonra; Db'ye Kullanici.Yetki.Add(Y) diyerek kaydı gönderdim.

SELECTLIST Hatasında Yardımları için AliRıza AdıYahşi'yede teşekkür ederim.

Çözüm;

public ActionResult YetkiVer(int UserID)
{
    var Y = new Yetkiler()
    {
        Kullanicilar = MasterDB.Kullanicilar.Find(UserID)
    };

    var Yetkiler = UyelikSistemi.Yetki.Where(o => o.Tur == GenelSistem.Uyelik.YetkiTipleri.Kullanici).ToList();
    ViewBag.Yetkiler = new SelectList(Yetkiler, "YetkiKodu", "YetkiAciklamasi");
    return View(Y);
}

        [HttpPost]
    public ActionResult YetkiVer(Yetkiler Y)
    {
        // SELECTLIST HATASINI ENGELLEMEK İÇİN...
        var Yetkiler = UyelikSistemi.Yetki.Where(o => o.Tur == GenelSistem.Uyelik.YetkiTipleri.Kullanici).ToList();
        ViewBag.Yetkiler = new SelectList(Yetkiler, "YetkiKodu", "YetkiAciklamasi");
        // SON..

        var K = MasterDB.Kullanicilar.Find(Y.Kullanicilar.Id);
        if (K.Yetkiler.Count == 0)
        {
            Y.Kullanicilar = null;
            K.Yetkiler.Add(Y);
        }
        else
        {
            Y.YetkiAciklamasi = UyelikSistemi.Yetki.Where(o => o.YetkiKodu == Y.YetkiKodu).FirstOrDefault().YetkiAciklamasi;
            K.Yetkiler.FirstOrDefault().YetkiKodu = Y.YetkiKodu;
            K.Yetkiler.FirstOrDefault().YetkiAciklamasi = Y.YetkiAciklamasi;
        }
        MasterDB.SaveChanges();
        TempData["Mesaj"] = Y.YetkiAciklamasi + " olarak Yetki tanımlaması yapıldı.";
        return RedirectToAction("Profil", "UyelikSistem", new { KId = Y.Kullanicilar.Id });
    }
permanent link

cevaplandı: 04 Eyl '14, 15:02

r3boot's gravatar image

r3boot
20661017
cevap kabul oranı: 50%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×3
×2
×1

Soruldu: 04 Eyl '14, 12:55

Görüntüleme: 369 kez

Son güncelleme: 04 Eyl '14, 17:36

powered by BitNami OSQA