1

私は、SaaS として実行するように設計されたアプリケーションの非常に基本的なセキュリティ問題であると考えているものを持っています。次の図は、エンティティ間の関係を示しています。

ここに画像の説明を入力

基本的に、会社のユーザーは、会社の他のすべてのユーザーがアクセスできるアイテムを作成します。問題は、Symfony2 でこれをどのように解決するのが最善かということです。ACL の使用はやり過ぎに思えます。

また、私が見た例のほとんどは、コントローラー アクションでセキュリティ対策を処理しているように見えますが、これは私には奇妙に思えます。セキュリティとアクセス許可を内部で処理するリポジトリとコントローラーがやり取りすることをお勧めします。

これのベストプラクティスは何ですか?

4

1 に答える 1

0

私の意見では、あなたのスキーマは解決策を示しています。

私が考えることができる最も単純なコーディングシナリオは次のとおりです。

My user is logged in
Get the user's company
Paginate all items attached to this company

あなたはACEシステムを持っていませんが、それはあなたの質問に従って仕事をします.

柔軟性をさらに高めたい場合は、とUserGroupの中間にエンティティを追加します。に関連し、についても同じことが言えます。このエンティティには、JSON でエンコードされた文字列で ACE データを保持する追加の列を含めることができるため、グループを取得するたびにグループの ACE に直接アクセスできます。CompanyUserItemItemCompanyUserGroupUserUserGroup

ACL/ACE について一般的に学んだことの 1 つは、統合を計画するには適切な時間を取らなければならないということです。そうしないと、保守が非常に難しくなります。

最後の質問に答えるために、ACL のベスト プラクティスはありません。Symfony2 には非常に一般的な ACL システムがあり、拡張性が低い可能性がありますが、ほとんどの要件 (すべてではないにしても) に適合します。Symfony2 ACL/ACE システムは素晴らしいと思いますが、パフォーマンスは素晴らしいとは言えません。

機会があれば、Symfony ACL/ACE システムを理想的なキャッシング層でラップできます。ただし、ホストで Memcached や Redis などのソリューションのインストールが許可されていない場合、このソリューションは使用できません。

于 2013-03-15T16:44:13.577 に答える