#kentico
#kentico
Вопрос:
Я использую Kentico 11. У меня есть раздел сайта, который требует входа пользователя для чтения и загрузки некоторого скрытого содержимого.
Эти пользователи хранятся в таблице Конфигурация -> Пользователи. У меня есть пользовательская роль, которой назначены эти пользователи, чтобы они могли входить в систему и просматривать содержимое и загружать файлы. У нас есть внешняя (CRM) система, которая интегрирована с Kentico. Эта CRM автоматизирует создание учетной записи пользователя и назначение ролей на основе ежегодных записей об обучении. Таким образом, учетные записи пользователей не создаются вручную. CRM управляет созданием и деактивацией. Это работает так, как задумано, с 1000 пользователей.
Бизнес-требования изменились и теперь требуют двух уровней доступа. Потребуется создать 2-ю роль. Первый уровень обеспечит базовый доступ к контенту. Новый 2-й уровень (дополнительная роль) позволит получить доступ к загрузкам файлов.
Первый уровень будет по-прежнему управляться сторонней интеграцией из CRM (учетная запись и 1-я назначенная роль). 2-й уровень должен управляться вручную. Кому-то придется войти в Kentico, Конфигурация -> Пользователи. Найдите пользователя и добавьте 2-ю роль.
Чтобы не взваливать нагрузку на программистов, мне нужно разрешить некоторым из моей нетехнической команды (служба поддержки клиентов, управление продуктами) управлять пользователями.
У этих нетехнических пользователей нет учетных записей Kentico CMS. Я не хочу делать их администраторами и давать им «ключи ко всему».
Мой вопрос относится к конфигурации -> Разрешения — могу ли я предоставить моей нетехнической команде разрешение на чтение для «Базового пользователя CMS» и управлять ролями пользователей «Подрядчик» (и моей пользовательской ролью 1st) и ожидать, что они смогут входить в Kentico, переходить к пользователям и обслуживать моих подрядчиков.
Ожидается, что это позволит им просматривать моих подрядчиков и добавлять их в новую 2-ю роль «Загрузка подрядчика». Возьмите bob.smith@someemail.com например. Боб — подрядчик, инструмент CRM добавил его в таблицу пользователей с аутентификацией ролей, всех и подрядчика. Боб прошел некоторое обучение, и теперь ему нужна роль загрузки подрядчика.
Является ли подходящей передовой практикой в Kentico предоставление моим нетехническим сотрудникам базовой роли пользователя и роли подрядчика CMS, чтобы они могли управлять нашими подрядчиками? Существует ли риск для этой конфигурации? Смогут ли они управлять другими ролями? Я не хочу, чтобы они могли редактировать управление контентом, электронную торговлю или любые другие конфигурации.
Ответ №1:
Может быть сложно дать разрешение на управление одной ролью, но не другой. Обычно с точки зрения разрешений пользовательского интерфейса у вас либо есть разрешение на всю операцию, либо нет.
Хотя использование внутреннего пользовательского интерфейса Kentico было бы полезно, и я думаю, что было бы неплохо предоставить им учетную запись с ограниченными административными ролями, я бы создал пользовательский пользовательский интерфейс и предоставил им доступ к этому пользовательскому интерфейсу, и все, что было бы элементом пользовательского интерфейса, — это выпадающий список доступных пользователей дляназначить роли и кнопку, которая будет использовать API Kentico для их назначения.
Вы можете создать все это с помощью веб-части пользовательского элемента управления и указать на свой 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").Resu<
ddlAvailableUsers.DataValueField = "UserID";
ddlAvailableUsers.DataTextField = "FullName";
ddlAvailableUsers.DataBind();
Комментарии:
1. хорошая идея для пользовательского элемента управления. Я бы также предположил, что могу добавить возможность удаленного назначения ролей, используя аналогичную технику. извлеките набор данных всех пользователей с этой ролью. вызовите метод .removeUserFromRole(). Какие-либо недостатки в этом?