如何在 RoleProvider 类中实现 AddUsersToRoles 方法?

Posted

技术标签:

【中文标题】如何在 RoleProvider 类中实现 AddUsersToRoles 方法?【英文标题】:How to implement AddUsersToRoles method in RoleProvider class? 【发布时间】:2020-12-17 15:33:02 【问题描述】:

我正在开发一个简单的 mvc 应用程序,其中通过选择列表显示所有用户,并通过另一个选择列表显示所有角色。我想从用户下拉列表中选择一个用户,从角色下拉列表中选择角色。我已经完成了所有工作,但我不知道如何在 Role Provider 类中实现 AddUsersToRoles 方法,而且我也没有从互联网上获得任何示例。请为我提供 AddUsersToRoles 方法的示例。我尝试过这样,但它给出了一个错误,不能将隐蔽类型 string[] 隐含为 int。请提供解决方案。

  public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    
        EmployeeDBContext context = new EmployeeDBContext();
        UserRolesMapping userRolesMapping = new UserRolesMapping();
        
        userRolesMapping.RoleID = roleNames;
        userRolesMapping.UserID = usernames;
        context.SaveChanges();

    

【问题讨论】:

【参考方案1】:

在 Microsoft 的 documentation 上有一个实现此方法的示例。

您可能需要根据您使用实体框架的标签更改该示例的后半部分(转到 Odbc 的位置)。

基本上,您需要另一个数据库表UsersInRolesUser 链接到Role。然后,在该表中为usernamesroleNames 的每个组合创建一行。

-- 编辑:

根据您的示例,您似乎正朝着正确的方向前进。但是,您尝试将 string 存储到 int 属性中。

我不知道您的确切模型结构,但它应该看起来像这样:

public override void AddUsersToRoles(string[] usernames, string[] roleNames)

    using (EmployeeDBContext context = new EmployeeDBContext())
    
        if (context.UsersInRoles == null)
        
            context.UsersInRoles = new List<UserRolesMapping>();
        

        foreach (string username in usernames)
        
            foreach (string roleName in roleNames)
            
                if(IsUserInRole(username, roleName)) continue;

                UserRolesMapping userRoleMapping = new UserRolesMapping();
                userRoleMapping.Role = roleNames;
                userRoleMapping.User = usernames;

                context.UsersInRoles.Add(userRoleMapping);
            
        

        context.SaveChanges();
    


private static bool IsUserInRole(string username, string roleName)

    using (EmployeeDBContext context = new EmployeeDBContext())
    
        var userRole = context.UsersInRoles.FirstOrDefault(x => x.User == username && x.Role == roleName);
        return userRole != null;
    

请注意,您需要进行其他代码更改才能使其正常工作,即本例中的RoleUserstrings,而不是int

【讨论】:

请看我的代码我试过这样但它给出了一个错误,无法将类型 string[] 隐式转换为 int。我该怎么办?请帮忙。 我已经用一个例子编辑了我的答案。您将需要更改项目中的一些代码并调整我的建议以使用您的代码。

以上是关于如何在 RoleProvider 类中实现 AddUsersToRoles 方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用类的 ArrayList 在 Spring 中实现 CRUD

如何在JAVA中实现两个集合的交和并

如何在Castle.Core中实现IProxyGenerationHook的类中实现Equals和GetHashCode的覆盖方法?

java 中实现复数的加减

如何在类中实现 websocket?

如何在 Ruby 中实现查找类?