0

在 Kentico 管理区域内,有一个使用“会员”功能将“角色”组合在一起的设施。我已经构建了一个“自定义角色提供程序”,允许我通过 API 访问 Kentico 数据库,这一切正常且正确。

API 允许我访问用户的角色,这很好,但理想情况下,我想访问“会员”以及通过 API 关联的“角色”。当我验证用户对页面/链接等的访问时,我只需要调用组名,然后搜索映射以找到关联的“角色”,然后授予或拒绝访问。

API中有什么方法可以做到这一点,我需要创建一个自定义SQL字符串并对数据库执行它以提取我需要的数据吗?

4

1 回答 1

1

没有开箱即用的功能可以做到这一点。您将不得不利用提供的信息对象及其提供者。我创建了简短的示例代码来帮助您理解这个概念。

    // Get user by name
    UserInfo user = UserInfoProvider.GetUserInfo("testUser");

    // Get user-role bindings by user's identifier
    InfoDataSet<UserRoleInfo> userRoles = UserRoleInfoProvider.GetUserRoles("UserID=" + user.UserID, null, -1, null);
    Response.Write("User: " + user.UserName + "<br /><br />");

    // Enumerate through user-role binding
    foreach (UserRoleInfo userRoleInfo in userRoles)
    {
        // Get role information based on role identifier
        RoleInfo role = RoleInfoProvider.GetRoleInfo(userRoleInfo.RoleID);
        Response.Write("User role: " + role.DisplayName + "<br />");

        // Get role-membership bindings using where condition
        InfoDataSet<MembershipRoleInfo> membershipRoles = MembershipRoleInfoProvider.GetMembershipRoles("RoleID=" + role.RoleID, null, -1, null);

        // Enumerate through role-membership bindings
        foreach (MembershipRoleInfo membershipRoleInfo in membershipRoles)
        {
            // Get membership info using identifier
            MembershipInfo membership = MembershipInfoProvider.GetMembershipInfo(membershipRoleInfo.MembershipID);
            Response.Write("Role membership: " + membership.MembershipDisplayName + "<br />");
        }

        Response.Write("<br />");
    }
于 2013-05-21T15:44:14.813 回答