Разрешения и контроль доступа
Обзор
Workify реализует комплексную систему контроля доступа на основе ролей, которая обеспечивает, чтобы участники команды имели соответствующий доступ к проектам, доскам и задачам, одновременно поддерживая безопасность и изоляцию данных. Основываясь на анализе кода, система использует комбинацию ролей пользователей, проверки разрешений и изоляции на основе команд для контроля доступа к функциям управления проектами.
Понимание системы разрешений поможет вам правильно настроить доступ команды и поддерживать соответствующую безопасность для ваших проектов и данных клиентов.
Доступ на основе ролей - различные роли пользователей и возможности
Система ролей пользователей
Доступные роли: Основываясь на анализе кода, система реализует 7 различных ролей пользователей:
1. СУПЕРАДМИНИСТРАТОР
- Полный доступ к системе - Полный контроль над всеми организационными данными и настройками
- isShowAllAndOwnProjectCRUD() - Может просматривать и управлять всеми проектами
- isShowAllAndOwnTaskCRUD() - Может просматривать и управлять всеми задачами
- Управление командой - Может управлять всеми участниками команды и ролями
- Финансовый контроль - Доступ ко всем функциям инвойсинга и финансов
2. МЕНЕДЖЕР ОРГАНИЗАЦИИ
- Лидерство команды - Управлять командами, проектами и настройками организации
- isShowAllAndOwnProjectCRUD() - Может просматривать и управлять всеми командными проектами
- isShowAllAndOwnTaskCRUD() - Может просматривать и управлять всеми командными задачами
- Управление клиентами - Полный доступ к отношениям с клиентами и данным
- Финансовый доступ - Может управлять инвойсингом и расходами
3. МЕНЕДЖЕР ПРОДАЖ
- Операции продаж - Надзор за деятельностью продаж и управление командой продаж
- isShowAllAndOwnTaskCRUD() - Может просматривать и управлять всеми задачами
- isShowAllAndOwnContactCRUD() - Может управлять всеми контактами и лидами
- isShowAllAndOwnDealCRUD() - Может управлять всеми сделками и возможностями
- Создание проектов - Может создавать проекты для клиентов
- Ограниченные финансы - Может создавать счета, но ограниченный финансовый доступ
4. ПРЕДСТАВИТЕЛЬ ПРОДАЖ
- Целевой доступ к продажам - Доступ только к назначенным лидам и сделкам
- isShowAllAndOwnDealCRUD() - Может управлять сделками и возможностями
- Создание проектов - Может создавать проекты для своих клиентов
- Ограниченная область - Не может получить доступ к данным других участников команды
- Взаимодействие с клиентами - Может управлять назначенными отношениями с клиентами
5. МЕНЕДЖЕР ПРОЕКТА
- Роль определена - Перечисление существует, но реализация не найдена в проанализированном коде
- Ограниченное использование - Роль может не быть активно реализована в текущей системе
6. ПОЛЬЗОВАТЕЛЬ
- Выполнение задач - Может работать над назначенными задачами и проектами
- Требуется назначение проекта - Должен быть назначен на проекты для доступа
- Доступ к сотрудничеству - Может комментировать, назначать пользователей и отслеживать время
- Ограниченное администрирование - Не может создавать проекты или управлять настройками команды
7. ПРОСМОТРЩИК ПРОЕКТА
- Роль доступа клиента - Разработана для доступа клиентского портала
- Два подтипа - Варианты 'viewer' и 'manager'
- Требуется назначение проекта - Должен быть назначен на конкретные проекты
- Доступ чтения/записи - Может просматривать и взаимодействовать с назначенными проектами
- Бесплатная роль - Добавление пользователей в этой роли бесплатно
Детали реализации ролей
Методы проверки ролей: Основываясь на анализе модели User:
- hasRole(RoleName $role) - Проверить, есть ли у пользователя конкретная роль
- Методы для конкретных ролей - isSuperAdmin(), isOrganizationManager() и т.д.
- Проверка разрешений - hasPermission(string $permission)
- Группы разрешений CRUD - isShowAllAndOwnProjectCRUD() и т.д.
Подтипы просмотрщика проекта:
- isViewer() - Роль PROJECT_VIEWER со значением 'viewer' project_viewer
- isViewerManager() - Роль PROJECT_VIEWER со значением 'manager' project_viewer
- isProjectViewer() - Любая роль PROJECT_VIEWER независимо от подтипа
Разрешения на уровне проектов - кто может получить доступ к каким проектам
Контроль доступа к проектам
Реализация разрешений проекта: Основываясь на анализе ProjectPolicy:
Просмотр проектов (viewAny):
- Проверка разрешений - Пользователи с разрешением 'project.viewAny'
- Доступ просмотрщика - Просмотрщики проектов могут видеть назначенные проекты
- Изоляция команды - Пользователи видят только проекты своей команды
Создание проектов (create):
- Роли администратора - isShowAllAndOwnProjectCRUD() (Суперандмин, Менеджер организации)
- Роли продаж - Менеджеры продаж и представители продаж могут создавать проекты
- Ограничение пользователей - Обычные пользователи не могут создавать проекты
Редактирование проектов (edit/update):
- На основе разрешений - Пользователи с разрешением 'project.update'
- Исключение просмотрщика - Просмотрщики проектов могут редактировать, если назначены на проект
- На основе владения - Пользователи продаж могут редактировать свои собственные проекты
- Валидация команды - Все редактирования требуют членства в той же команде
Удаление/архивирование проектов:
- Контроль администратора - В основном роли администратора и менеджера
- Права владения - Пользователи продаж могут удалять свои собственные проекты
- Изоляция команды - Может удалять только проекты в той же команде
Система назначения проектов
Связи пользователей проекта:
- Система назначения пользователей - Явное назначение пользователей на проекты
- belongsToProject() - Метод для проверки, принадлежит ли пользователь проекту
- Валидация команды - Назначение проекта требует членства в той же команде
- Каскад разрешений - Назначение проекта влияет на доступ к доскам и задачам
Преимущества назначения: ✅ Гранулярный контроль - Назначать конкретных пользователей на конкретные проекты ✅ Изоляция безопасности - Пользователи получают доступ только к назначенным проектам ✅ Гибкое управление - Легко добавлять/удалять пользователей из проектов ✅ Наследование разрешений - Назначение проекта включает доступ к доскам и задачам
Безопасность на уровне досок - контроль доступа для конкретных досок
Система разрешений досок
Контроль доступа к доскам: Основываясь на анализе ProjectBoardPolicy:
Просмотр досок:
- Зависимость разрешений задач - Требует разрешения 'task.viewAny'
- Назначение проекта - Должен быть назначен на проект, содержащий доску
- Членство в команде - Должен быть участником той же команды, что и доска
- Доступ на основе ролей - Различные уровни доступа на основе роли пользователя
Создание досок:
- Роли администратора - Пользователи isShowAllAndOwnTaskCRUD() могут создавать доски
- Обычные пользователи - Пользователи могут создавать доски на назначенных проектах
- Менеджеры просмотрщиков - Могут создавать доски на назначенных проектах
- Ограничение просмотрщиков - Обычные просмотрщики не могут создавать доски
Управление досками:
- Разрешение обновления - Требует разрешения 'task.update'
- На основе владения - Пользователи могут управлять досками, которыми они владеют
- Переопределение администратора - Администраторы могут управлять всеми командными досками
- Валидация команды - Все операции требуют членства в той же команде
Функции безопасности досок
Валидация доступа:
- Многоуровневая проверка - Проверка разрешений, ролей, команды и назначения проекта
- Соединение пользователей проекта - Сложный запрос, соединяющий таблицы проектов и project_users
- Изоляция команды - Доступ к доскам строго ограничен участниками команды
- Каскад разрешений - Доступ к доскам включает доступ к колонкам и задачам
Преимущества безопасности: ✅ Безопасность на основе проектов - Доступ к доскам привязан к назначению проекта ✅ Изоляция команды - Полное разделение между различными командами ✅ Уважение ролей - Различные возможности на основе ролей пользователей ✅ Признание владения - Владельцы досок имеют расширенные разрешения
Разрешения на уровне задач - детализированный доступ к задачам
Система разрешений задач
Контроль доступа к задачам: Основываясь на анализе TaskPolicy:
Просмотр задач:
- Валидация команды - Должен быть участником той же команды, что и задача
- Проверка команды колонки - Валидирует, что команда пользователя соответствует команде колонки задачи
- Все роли разрешены - Все типы ролей могут просматривать задачи (с валидацией команды)
- Универсальный доступ - viewAny() возвращает true (с другими валидациями)
Создание задач:
- Широкий доступ - Большинство ролей могут создавать задачи (администратор, пользователь, просмотрщик, менеджер просмотрщика)
- Назначение проекта - Должен иметь доступ к целевому проекту
- Проверка разрешений - Некоторые роли требуют разрешения 'task.update'
- Валидация команды - Создание задач ограничено участниками команды
Управление задачами:
- Обновление задач - Аналогичные разрешения к созданию задач
- Удаление задач - Требует соответствующую роль и членство в команде
- Назначение пользователей - Может назначать пользователей на задачи с соответствующими разрешениями
- Добавление комментариев - Широкий доступ для командного сотрудничества
Специальные разрешения задач:
- moveToBoard - Может перемещать задачи между досками в той же команде
- Отслеживание времени - Просмотрщики проектов с типом 'viewer' не могут отслеживать время
- Доступ к файлам - Доступ к вложениям задач следует разрешениям задач
Реализация безопасности задач
Паттерн валидации разрешений: Все операции с задачами следуют аналогичному паттерну валидации:
- Валидация команды - Проверить, что команда пользователя соответствует команде колонки задачи
- Проверка роли - Проверить, что роль пользователя имеет соответствующие разрешения
- Назначение проекта - Убедиться, что пользователь назначен на проект (для просмотрщиков)
- Строка разрешений - Проверить конкретные строки разрешений, где требуется
Преимущества безопасности задач: ✅ Изоляция команды - Задачи полностью изолированы между командами ✅ Доступ на основе проектов - Доступ к задачам привязан к назначению проекта ✅ Разрешения, соответствующие ролям - Различные возможности на основе роли пользователя ✅ Детализированный контроль - Конкретные разрешения для различных операций с задачами
Доступ клиентского портала - что клиенты могут видеть и делать
Реализация клиентского портала
Система пользователей клиентов: Основываясь на анализе кода, доступ клиентского портала использует роль PROJECT_VIEWER:
Функции клиентского портала:
- Вид DashboardClient - Специальная панель для пользователей клиентов
- Обнаружение isViewer() - Система обнаруживает пользователей клиентов и направляет к клиентскому интерфейсу
- Интеграция чата - Автоматическое создание чата для коммуникации с клиентами
- Интеграция виджетов - Виджет клиентского портала для коммуникации
Разрешения доступа клиентов:
- Требуется назначение проекта - Клиенты должны быть назначены на конкретные проекты
- Валидация команды - Доступ клиентов ограничен их командным контекстом
- Ограниченная область - Клиенты видят только назначенные проекты и связанные данные
- Профессиональный интерфейс - Отдельный интерфейс, ориентированный на клиентов
Безопасность клиентского портала
Контроль доступа для клиентов:
- Маршрутизация на основе ролей - Пользователи isViewer() автоматически направляются к клиентскому порталу
- Изоляция проектов - Клиенты видят только проекты, на которые они назначены
- Фильтрация данных - Все запросы отфильтрованы по назначению клиента и разрешениям
- Граница команды - Доступ клиентов строго ограничен их командой
Преимущества клиентского портала: ✅ Безопасный доступ - Клиенты видят только релевантную информацию о проекте ✅ Профессиональный интерфейс - Чистый, подходящий для клиентов интерфейс ✅ Прозрачность проекта - Клиенты могут видеть прогресс и статус проекта ✅ Контролируемая коммуникация - Управляемые каналы коммуникации с командой
Архитектура системы разрешений
Техническая реализация
Хранение разрешений:
- Система ролей - Хранит доступные роли пользователей и возможности
- Назначение ролей пользователей - Связывает пользователей с ролями с командным контекстом
- Индивидуальные разрешения - Конкретные разрешения в рамках каждой роли
- Изоляция команды - Все разрешения ограничены уровнем команды
Проверка разрешений:
- hasPermission() - Проверка разрешений на основе строк
- Методы ролей - Конкретные методы проверки ролей
- Классы политик - Выделенные классы политик для каждой модели
- Регистрация ворот - Автоматическая регистрация ворот для всех разрешений
Уровни безопасности:
- Аутентификация - Пользователь должен быть авторизован
- Членство в команде - Пользователь должен быть участником релевантной команды
- Валидация роли - Пользователь должен иметь соответствующую роль
- Проверка разрешений - Пользователь должен иметь конкретное разрешение
- Назначение проекта - Пользователь должен быть назначен на проект (где применимо)
Преимущества разрешений
✅ Многоуровневая безопасность - Множественные уровни валидации предотвращают несанкционированный доступ ✅ Изоляция команды - Полное разделение между различными командами ✅ Доступ, соответствующий ролям - Разрешения соответствуют ответственности пользователя ✅ Контроль для конкретных проектов - Детализированный контроль доступа к проектам ✅ Безопасность клиентов - Безопасный, контролируемый доступ для пользователей клиентов
Начало работы с управлением разрешениями
Руководство по быстрому старту
Шаг 1: Поймите вашу роль
- Проверьте вашу роль пользователя и разрешения
- Поймите, какие действия вы можете выполнять
- Знайте, к каким проектам и данным вы можете получить доступ
- Определите любые ограничения в вашем доступе
Шаг 2: Управляйте разрешениями команды
- Просмотрите роли участников команды и уровни доступа
- Назначьте пользователей на соответствующие проекты
- Проверьте, что участники команды имеют необходимые разрешения
- Настройте роли по мере необходимости для требований проекта
Шаг 3: Настройте доступ клиентов
- Настройте пользователей клиентов с ролью PROJECT_VIEWER
- Назначьте клиентов на конкретные проекты
- Настройте доступ клиентского портала соответствующим образом
- Протестируйте доступ клиентов, чтобы убедиться в правильной изоляции
Лучшие практики разрешений
✅ Принцип наименьших привилегий - Давайте пользователям только доступ, который им нужен ✅ Регулярный обзор - Периодически аудитируйте роли и разрешения пользователей ✅ Четкое определение ролей - Обеспечьте, чтобы команда понимала свои уровни доступа ✅ Назначение проектов - Правильно назначайте пользователей на релевантные проекты ✅ Разделение клиентов - Держите доступ клиентов безопасным и соответствующим ✅ Изоляция команды - Поддерживайте четкие границы между командами
Устранение неполадок проблем разрешений
Общие проблемы
Не могу получить доступ к проектам:
- Проверка роли - Проверьте, что у вас есть соответствующая роль для доступа к проектам
- Назначение проекта - Убедитесь, что вы назначены на конкретный проект
- Членство в команде - Подтвердите, что вы участник правильной команды
- Строка разрешений - Проверьте, есть ли у вас требуемые строки разрешений
Не могу создавать/редактировать задачи:
- Разрешение задач - Проверьте, что у вас есть разрешение 'task.update'
- Назначение проекта - Убедитесь, что вы назначены на проект
- Валидация команды - Подтвердите, что ваша команда соответствует команде задачи
- Ограничения ролей - Некоторые роли имеют ограниченный доступ к задачам
Проблемы клиентского портала:
- Конфигурация роли - Проверьте, что клиент имеет роль PROJECT_VIEWER
- Назначение проекта - Убедитесь, что клиент назначен на конкретные проекты
- Настройка портала - Проверьте конфигурацию виджета клиентского портала
- Контекст команды - Проверьте, что клиент находится в правильном командном контексте
Отладка разрешений
Проверка ваших разрешений:
- Проверка роли - Подтвердите вашу назначенную роль
- Список разрешений - Просмотрите ваши конкретные разрешения
- Назначение проекта - Проверьте, на какие проекты вы назначены
- Контекст команды - Проверьте, что вы находитесь в правильной команде
- Валидация политики - Поймите, какие правила политики применяются к вашим действиям
Следующие шаги
Теперь, когда вы понимаете разрешения и контроль доступа, вы готовы изучить:
- Мобильные и адаптивные функции - Мобильный интерфейс и сенсорные взаимодействия
- Отчетность и аналитика - Метрики производительности проекта и продуктивности команды
- Лучшие практики и рабочие процессы - Рекомендуемые подходы к управлению проектами
- Устранение неполадок и часто задаваемые вопросы - Общие проблемы и решения
Помните: Система разрешений в Workify разработана для обеспечения безопасности, одновременно позволяя сотрудничество. Понимание вашей роли и разрешений поможет вам эффективно работать в системе, одновременно поддерживая соответствующий контроль доступа для вашей команды и клиентов.
