2016-07-06 9 views
0

私は店舗のスタッフの整理を支援するためのアプリを開発しています。多くのお店があり、各ショップはスタッフのために多くの役割を担っています。唯一のポジションはマネージャのものです。私は彼/彼女が彼/彼女自身の役割を作成できるようにしたいと思います。たとえば、店舗Aでは、配達人が注文状況を更新することがありますが、店舗Bでは更新できません。 ご覧のとおり、私は役割が習慣的であり、特定の店に拘束されることを望みます。 私はcancancan、rolify、punditの3つの宝石を考えています(しかし、私は提案にはオープンしています)。 Rolifyは、あの有名なものではありませんが、それはあなたが最良の選択であると思います宝石レール、認可のための宝石選択

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

を言うためにconvinientオプションを持っていますか?ありがとうございました!

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 

チェック評論家のようなポリシーを生成することができますドキュメンテーション。

役割について:ロールを管理するロールモデルの宝石(https://github.com/martinrehfeld/role_model)あまりにも簡単です。例を確認し、必要に応じて質問してください。

1

質問に対する回答は、回答者の意見に基づいています。私の意見では、私はCanCanCanを好むでしょう。なぜなら、私はしばらくそれを使用していたからです。セットアップが最初は少し問題になるかもしれないと理解していましたが、それを超えて、すべて滑らかな帆です。単純なロジックでも、アプリケーション内で列挙型を使用して、すぐに生産性を得ることができます。他の人はPunditを主張しています。これはセットアップが簡単で、統合が容易で、他の図書館(rolifyやdeviseなど)との連携が容易です。この場合は正解か間違った答えがないかもしれませんが、最終的には特定のユースケースとセットアップに要した時間によって決定されます。

1

あなたの要求に応じて、Pundit Gemよりも承認の対象となるのが最善です。

私の知識によれば、専門家や宝石だけでなく、あなたのためにすべてのことを行う。あなたは、ショップごとにすべてのユーザーに動的な許可を与える必要があります。したがって、データベースの設定も管理する必要があります。

3つのテーブルが必要です。

ユーザー
役割
許可

シナリオ以上
user has_one role 
role has_many permissions 
user has_many permissions through role 

以下のような関係を設定は一例であり、コア・ロジックは変更される場合があり、要件に応じて異なります。

希望すると、これが役立ちます。

関連する問題