【问题标题】:Assign permission for pages using Code first in asp.net MVC在 asp.net MVC 中使用 Code first 为页面分配权限
【发布时间】:2012-12-26 14:19:59
【问题描述】:

这里我在 asp.net mvc 中创建了一个模型结构:

public class UserModel
{
    public int UserId {  get;  set;  }
    public string UserName  {  get;   set;  }
    public string Password   {    get; set;    }
    public List<Permission> Permissions {   get;   set;  }
    public string FirstName {  get;  set;  }
    public string LastName {  get;   set;  }
}

public class Permission
{
    public int PermissionID {   get;  set;   }
    public bool IsPermit   {  get;  set;  }
    public string Name  {  get;  set;  }
}

并在列表中设置一些默认值,当我在列表中添加用户时,我通过 UI 将页面权限分配给该用户(通过检查权限复选框),以便用户只能访问分配的页面:

public static class Repository
{
    public static List<UserModel> GetUsers()
    {
        List<UserModel> listUsers = new List<UserModel>
        {
            new UserModel
            {
                UserId = 1,
                UserName = "abc",
                Password = "abc",
                Permissions = new List<Permission>
                {
                    new Permission
                    {
                        PermissionID = 1,
                        IsPermit = true,
                        Name = "Page1"
                    },
                    new Permission
                    {
                        PermissionID = 2,
                        IsPermit = false,
                        Name = "Page2"
                    },
                    new Permission
                    {
                        PermissionID = 3,
                        IsPermit = false,
                        Name = "Page3"
                    },
                    new Permission
                    {
                        PermissionID = 4,
                        IsPermit = false,
                        Name = "Page4"
                    }
                },
                FirstName = "Rohit",
                LastName = "Sharma"
            },

            new UserModel
            {
                UserId = 2,
                UserName = "xyz",
                Password = "xyz",
                Permissions = new List<Permission>
                {
                    new Permission
                    {
                        PermissionID = 1,
                        IsPermit = false,
                        Name = "Page1"
                    },
                    new Permission
                    {
                        PermissionID = 2,
                        IsPermit = true,
                        Name = "Page2"
                    },
                    new Permission
                    {
                        PermissionID = 3,
                        IsPermit = true,
                        Name = "Page3"
                    },
                    new Permission
                    {
                        PermissionID = 4,
                        IsPermit = true,
                        Name = "Page4"
                    }
                },
                FirstName = "Rahul",
                LastName = "Sharma"
            }
        };

        return listUsers;
    }
}

现在我想在 DbContext 类的帮助下使用数据库的代码优先方法来做同样的事情。我在数据库表中有一个静态页面权限列表(Id =1,Name=Page1;Id =2,Name=Page2;Id =3,Name=Page3;Id =4,Name=Page4)。

在为数据库创建模型结构时我很困惑。请指导我如何使用表格创建模型结构和结构映射。

我的数据库中有一个带有默认行的表(权限)。

ID Name

1 Page1

2 Page2

3 Page3

4 Page4

现在,当我添加用户时,我通过静态复选框(Page1、Page2、Page3 和 Page4)为该用户分配权限。这就是我在包含页面列表的数据库中创建静态表的原因。我的用户表最初是空白的。

User

Id            int             NotNull

UserName      nvarchar(100)   AllowNull

Password      nvarchar(100)   AllowNull

FirstName     nvarchar(100)   AllowNull

LastName      nvarchar(100)   AllowNull

【问题讨论】:

  • 通过使用上述结构,你可以从“权限”表中检索数据吗?我觉得你不能。因为你的模型和表属性完全不同???。到目前为止,你为从数据库获取权限数据编写的代码是什么。把那个代码也放上。你的视图代码也需要。跨度>

标签: sql asp.net-mvc ef-code-first entity-framework-4.1


【解决方案1】:

当您首先使用代码时,您可以使用下面提到的结构。当您首先使用代码时,您必须保持约定(但是当您使用 Fluent API 时可以更改)。

模型类

public class User
{
    public int Id {  get;  set;  }
    public string UserName  {  get;   set;  }
    public string Password   {    get; set;    }
    public string FirstName {  get;  set;  }
    public string LastName {  get;   set;  }

    public virtual ICollection<Permission> Permissions {   get;   set;  }

}

public class Permission
{
    public int Id {   get;  set;   }
    public bool IsPermit   {  get;  set;  }
    public string Name  {  get;  set;  }

    public virtual User {   get;   set;  }

}

表格(这将自动生成。但如果您愿意,也可以手动创建)

Users

Id            int             NotNull
UserName      nvarchar(100)   AllowNull
Password      nvarchar(100)   AllowNull
FirstName     nvarchar(100)   AllowNull
LastName      nvarchar(100)   AllowNull


Permissions

Id            int             NotNull
IsPermit      bit             AllowNull
Name          nvarchar(100)   AllowNull
User_Id       int             NotNull

DbContext 派生类

public class UserEntities : DbContext
    {
       public DbSet<User> Users { get; set; }
       public DbSet<Permission> Permissions { get; set; }
    }

更多信息查看Code-First Development with Entity Framework

希望对你有帮助。

【讨论】:

  • 感谢您的回复。但是我已经在数据库表(权限)中有一个静态权限列表。在这种情况下,权限会随着用户添加的数量重复。有没有其他方法可以做到这一点,权限不会重复?
  • @user1273915 您目前使用的是代码优先方法吗?我认为您需要根据最佳方式重新设计事物(代码优先使用的约定)。
  • 是的,我目前正在使用代码优先方法。你能解释一下我怎样才能做到这一点吗?谢谢。
  • @user1273915 你能详细解释一下你的业务或需求吗?
  • 我的数据库中有一个表(权限)。 ID 名称 1 Page1 2 Page2 3 Page3 4 Page4 现在,当我添加用户时,我通过静态复选框(Page1、Page2、Page3 和 Page4)为该用户分配权限。这就是我在包含页面列表的数据库中创建静态表的原因。我的用户表最初是空白的。用户 ID int NotNull 用户名 nvarchar(100) AllowNull 密码 nvarchar(100) AllowNull FirstName nvarchar(100) AllowNull LastName nvarchar(100) AllowNull
猜你喜欢
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2011-04-25
  • 2011-10-26
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多