2013-10-11 2 views
1

Je fait authentification selon la username.So une personne non autorisée ne peut pas voir toutes les méthodes qui fonctionne très bien.Récupération des données Selon le nom d'utilisateur

The problem is all of the users are able to each others data. Person A shouldn't see the records of person B so that he/she can't edit another person's records.Does anyone know how I can write a lambda expression for that? I have my Edit method pasted below:

// GET: /IcerikDB_/Edit/5 
[Authorize(Roles = "Administrator")] 
public ActionResult Edit(int id) 
{ 
    icerik icerik = db.icerik.Find(id); 
    ViewBag.Kategorid = new SelectList(db.Kategoriler, "Id", "Adi", icerik.Kategorid); 
    ViewBag.Userid = new SelectList(db.Users, "UserId", "UserName", icerik.Userid); 
    return View(icerik); 
} 

[HttpPost] 
public ActionResult Edit(icerik icerik) 
{ 
    if (ModelState.IsValid) 
    { 
     if (User != null && User.Identity != null && User.Identity.IsAuthenticated) 
     { 
      string userName = User.Identity.Name; 
      var user = db.Users.First(u => u.UserName == userName); 
      icerik.Userid = user.UserId; 
      db.Entry(icerik).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    ViewBag.Kategorid = new SelectList(db.Kategoriler, "Id", "Adi", icerik.Kategorid); 
    ViewBag.Userid = new SelectList(db.Users, "UserId", "UserName", icerik.Userid); 
    return View(icerik); 
} 

Voici le code pour icerik.cs

namespace KategoriEditor.Icerik_DB 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 

    public partial class icerik 
    { 
     public int Id { get; set; } 
     public Nullable<int> Kategorid { get; set; } 
     public Nullable<System.Guid> Userid { get; set; } 
     [DataType(DataType.Date)] 
     public Nullable<System.DateTime> Baslangic { get; set; } 
     [DataType(DataType.Date)] 
     public Nullable<System.DateTime> Bitis { get; set; } 
     public string tamicerik { get; set; } 
     public string kisaicerik { get; set; } 
     public string resimlink { get; set; } 

     public virtual Kategoriler Kategoriler { get; set; } 
     public virtual Users Users { get; set; } 
    } 
} 
+2

Pourquoi archivez User.Identity à ActionResult, vous utilisez Autorisez attribut ou personnalisé et le définir en un seul endroit. Chaque entité appartient à une personne (id), n'affiche que les entités de cette personne. Lors de l'édition, vérifiez si la personne qui édite a également créé l'entité. –

+0

Cette partie du code consiste à insérer UserName lorsque l'utilisateur clique sur le bouton ** "Enregistrer" **. ** [Authorize] ** est écrit au début du contrôleur pour prendre en charge l'autorisation. Ce que je veux que mon code fasse est d'afficher uniquement les enregistrements de l'utilisateur connecté. –

+0

Je ne vois rien saisir les journaux pour le modèle ... Je vois un modèle passé, est converti en une liste de sélection, et retourné avec une vue. – ps2goat

Répondre

1

Essayez ceci:

public ActionResult Edit(int id) 
{ 
    // Get the currently logged in user. 
    string userName = User.Identity.Name; 
    var user = db.Users.First(u => u.UserName == userName); 

    // Determine whether the requested id is the same id as the currently logged in user. 
    icerik icerik = db.icerik.Find(id); 
    if (icerik.Userid.HasValue && icerik.Userid.Value == user.UserId) 
    {  
     ViewBag.Kategorid = new SelectList(db.Kategoriler, "Id", "Adi", icerik.Kategorid); 

     // You should not need this SelectList anymore. 
     //ViewBag.Userid = new SelectList(db.Users, "UserId", "UserName", icerik.Userid); 
     return View(icerik); 
    } 
    // This redirect the unauthorized user to the homepage. This can be any other page of course. 
    return RedirectToAction("Index", "Home"); 
} 
+0

Il m'a donné et erreur indiquant que l'opérateur « == » ne peut pas être appliqué aux opérandes XXXController.cs de type « int » et ' System.Guid » l'erreur est juste sur: ' if (id == user.UserId) ' –

+0

@RuhiGoktas peuvent vous montrer le code de la classe' icerik', et décrire qu'il est en réalité? –

+0

J'ai mis à jour la question et j'ai collé icerik.cs là –

Questions connexes