Пользовательские разрешения для конкретной компании в приложении rails - PullRequest
0 голосов
/ 08 января 2019

Мое приложение использует Devise для аутентификации, CanCanCan для авторизации и RailsAdmin для администратора. В настоящее время есть пользователи, которых считают «администраторами», и они могут получить доступ ко всему в приложении, и есть пара других типов пользователей, которые в основном являются разновидностями администраторов с немного меньшими привилегиями, все они определены в файле Ability.rb.

Однако теперь мне нужно реализовать разрешения на уровне компании для пользователей. Прямо сейчас администраторы имеют доступ к любой компании в приложении. В дальнейшем мне нужно добавить возможность для владельца компании добавлять / приглашать пользователей в свою компанию и давать им определенные разрешения. Этот пользователь также может потенциально принадлежать другим компаниям в приложении с различными разрешениями.

CanCanCan "может" это сделать? Или это работа для пандита? Что-то еще целиком?

Все учебные пособия и документация, которые я вижу в Интернете для CCC и Pundit, содержат разрешения для всего приложения. Но мне нужен более детальный контроль.

Например, в моем приложении сотни компаний. В каждой компании есть пользователь, который является «владельцем», и они каждый день входят в систему, чтобы посмотреть информацию о своих доходах. Этот владелец / пользователь хочет пригласить Джо Смита в приложение, чтобы они также могли просматривать данные и вносить изменения. Но они не хотят, чтобы Джо Смит мог видеть определенные типы данных. Поэтому мы ограничиваем доступ Джо Смита к определенным данным для этой компании.

Это полностью отделено от того, для чего я в настоящее время использую CanCanCan, для установки прав доступа для администраторов, чтобы пользователь-администратор мог видеть ЛЮБУЮ информацию о компании и вносить изменения в глобальном масштабе.

Мне любопытно узнать, сталкивался ли кто-нибудь с этой проблемой раньше и что они, возможно, использовали для ее решения. Я очень ценю любой совет / мудрость!

1 Ответ

0 голосов
/ 08 января 2019

Да, это возможно с CanCanCan. Вы можете ограничить свои разрешения для конкретных company_id. Предполагая, что Admin модель имеет company_id, вы можете написать:

can :manage, Company, :id => admin.company_id
...