【问题标题】:Kentico User and Role ManagementKentico 用户和角色管理
【发布时间】:2020-10-03 04:46:04
【问题描述】:

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

这些用户存储在配置 -> 用户表中。我有一个为这些用户分配的自定义角色,以便他们可以登录并查看内容和下载文件。我们有一个与 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


    【解决方案1】:

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

    虽然使用 Kentico 的后端 UI 会有所帮助,并且我认为给他们一个具有有限管理角色的帐户会很好,但我会做的是 create a custom User interface 并给他们access to that 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();
    

    【讨论】:

    • 自定义控件的好主意。我还假设我可以使用类似的技术添加远程角色分配的能力。检索具有该角色的所有用户的数据集。调用 .removeUserFromRole() 方法。这有什么缺点吗?
    猜你喜欢
    • 2011-03-20
    • 2013-02-26
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2015-11-02
    • 2012-02-26
    相关资源
    最近更新 更多