首页 > 解决方案 > Kentico 用户和角色管理

问题描述

我正在运行 Kentico 11。我有一个网站部分需要用户登录才能阅读和下载一些隐藏的内容。

这些用户存储在 Configuration -> Users 表中。我有一个为这些用户分配的自定义角色,以便他们可以登录并查看内容和下载文件。我们有一个与 Kentico 集成的外部 (CRM) 系统。此 CRM 根据年度培训记录自动创建用户帐户和角色分配。因此,不会手动创建用户帐户。CRM 管理创建和停用。这与 1,000 名用户按预期工作。

业务需求发生了变化,现在需要两个级别的访问权限。将需要创建第二个角色。第一层将允许对内容的基本访问。新的第二层(附加角色)将允许访问文件下载。

第一层将继续由来自 CRM 的第 3 方集成管理(分配的帐户和第一个角色)。第二层必须手动控制。必须有人登录 Kentico,配置 -> 用户。搜索用户并添加第二个角色。

为了避免给程序员带来负担,我需要让我的一些非技术团队(客户支持、产品管理)能够管理用户。

这些非技术人员没有 Kentico CMS 帐户。我不想让他们成为管理员并给他们“一切的钥匙”。

我的问题是针对 Configuration -> Permissions - 我可以给我的非技术团队“CMS Basic User”和 Manage User Roles “Contractor”(以及我的自定义角色 1st )的读取权限,并期望他们能够登录 Kentico,导航到用户并维护我的承包商。

预计这将允许他们查看我的承包商,并将他们添加到新的第二个角色“承包商下载”。以 bob.smith@someemail.com 为例。Bob 是一名承包商,CRM 工具将他添加到用户表中,角色为 Authenticated、Everyone 和 Contractor。Bob 已完成一些培训,现在需要 Contractor Download 角色。

Kentico 的最佳实践是否为我的非技术人员提供 CMS 基本用户角色和承包商角色,以便他们可以管理我们的承包商?这种配置有风险吗?他们能管理其他角色吗?我不希望他们能够编辑内容管理、电子商务或任何其他配置。

标签: kentico

解决方案


授予管理一个角色但不管理另一个角色的权限可能很困难。通常就 UI 权限而言,您要么拥有整个操作的权限,要么没有。

虽然使用 Kentico 的后端 UI 会是有益的,并且给他们一个具有有限管理角色的帐户我认为会很好,但我要做的是创建一个自定义用户界面并让他们访问该 UI,所有这些 UI 元素都是将是分配给角色的可用用户的下拉列表,以及使用 Kentico 的 API 分配它们的按钮。

您可以使用自定义控件 webpart 制作整个内容并指向您的 ascx,不需要任何特别花哨的东西。

分配角色的 API 非常简单:

UserRoleInfoProvider.AddUserToRole(ValidationHelper.GetInteger(ddlAvailableUsers.SelectedValue, 0), RoleInfoProvider.GetRole("ContractorDownload").RoleID);

使用以下数据集创建 (UserID, UserFullName) 的下拉列表:

int[] UserIDsInContractorRole = UserRoleInfoProvider.GetUserRoles()
.WhereEquals("RoleID", RoleInfoProvider.GetRole("Contractor").RoleID)
.Select(x => x.UserID).ToArray();

int[] UserIDsAlreadyAssigned = UserRoleInfoProvider.GetUserRoles()
.WhereEquals("RoleID", RoleInfoProvider.GetRole("ContractorDownload").RoleID)
.Select(x => x.UserID).ToArray();

ddlAvailableUsers.DataSource = UserInfoProvider.GetUsers().WhereIn("UserID", UserIDsInContractorRole).WhereNotIn("UserID", UserIDsAlreadyAssigned).Columns("UserID, FullName").OrderBy("FullName").Result;

ddlAvailableUsers.DataValueField = "UserID";
        ddlAvailableUsers.DataTextField = "FullName";
    ddlAvailableUsers.DataBind();

推荐阅读