Kentico 用户和角色管理

Kentico User and Role Management

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

这些用户存储在配置 -> 用户 table 中。我有一个为这些用户分配的自定义角色,这样他们就可以登录并查看内容和下载文件。我们有一个与 Kentico 集成的外部 (CRM) 系统。该 CRM 根据年度培训记录自动创建用户帐户和分配角色。所以用户帐户不会被手动创建。 CRM 管理创建和停用。这对 1,000 名用户来说是正常的。

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

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

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

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

我的问题特定于配置 -> 权限——我可以向我的非技术团队授予对“CMS 基本用户”的读取权限和管理用户角色“承包商”(以及我的自定义角色 1st)并期望他们将能够登录到 Kentico,导航到用户并维护我的承包商。

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

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

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

虽然使用 Kentico 的后端 UI 会有所帮助,但我认为给他们一个具有有限管理角色的帐户会很好,我会做的是 create a custom User interface and give them access to that UI,所有这些 UI 元素将是可分配给该角色的可用用户的下拉列表,以及一个使用 Kentico 的 API 来分配他们的按钮。

您可以使用自定义控件 Web 部件制作整个内容并指向您的 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();