2016-07-06 1 views
0

Я создаю приложение, целью которого является помочь магазинам организовать свой персонал. Есть много магазинов, и каждый магазин имеет много ролей для персонала. Единственная постоянная позиция - это менеджерский. Я бы хотел, чтобы он/она создал свою собственную роль. Например, в магазине A парень по доставке может обновить order_status, но в магазине B он не может. Как вы можете видеть, я хотел бы, чтобы роли были обычными и были ограничены в конкретном магазине. Я рассматриваю три драгоценных камня для авторизации - cancancan, rolify и pundit (но я открыт для предложений). Rolify не то, что знаменитый один, но он имеет удобный вариант сказатьRails, выбор драгоценных камней для авторизации

user.has_role?(:manager, Shop.find(4)) 

Какой драгоценный камень вы думаете это лучший выбор? Спасибо!

EDIT: Я нашел следующую ссылку чрезвычайно полезной. Click

+0

Популярным камнем для «ролей» является [pundit] (https://github.com/elabs/pundit) –

ответ

0

Pundit управляет разрешением через политики, и я думаю, что это самое лучшее.

Вы можете крит приложение,/политика/application_policy.rb, которые управляют действиями, как индекс/шоу/создать ....

def index? 
    false 
    end 

    def show? 
    false 
    end 

    def create? 
    false 
    end 

    def new? 
    create? 
    end 

    def update? 
    false 
    end 

    def edit? 
    update? 
    end 

    def destroy? 
    false 
    end 

И после этого произвести политику как

class MyClassPolicy < ApplicationPolicy 
end 

Проверить пандитом документация.

О ролях, которые вы можете использовать: ролевая модель gem (https://github.com/martinrehfeld/role_model), которые слишком легко управляют ролями. Проверьте пример и спросите, если это необходимо.

1

Ответ на ваш вопрос будет основываться на мнениях ответчика. На мой взгляд, я бы предпочел CanCanCan, в основном потому, что я использовал его на некоторое время, понимая, что установка может быть немного проблемой сначала, но как только это получилось, это все гладкий парус. Простая логика также позволяет мне использовать перечисления в моем приложении и быстро перейти к производительности. Другие могут утверждать, что Pundit, который также прост в настройке и легко интегрируется и упрощается работа с другими библиотеками, такими как ротация и разработка и т. Д. В этом случае может не быть правильного или неправильного ответа, но я думаю, что в конечном итоге это будет определяется вашим конкретным вариантом использования и количеством времени, которое у вас есть для настройки.

1

Если вы заявляете для авторизации, что Pundit Gem является лучшим в соответствии с вашими требованиями.

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

Вам нужен три таблицы типа.

Пользователь
Роль
Разрешение

и установить отношения, как показано ниже

user has_one role 
role has_many permissions 
user has_many permissions through role 

Над сценарием является только примером основной логики может варьироваться в зависимости от ваших требований.

Надеюсь, это вам поможет.