2

私はまだケーキの初心者です。group_idを持つテーブルusersとgroupsGroupsというテーブルがあるとします。

  • idロール
  • 1管理者
  • 2先生
  • 3人の学生

たとえば、isAuthorized関数を使用してユーザーに特定のアクションへのアクセスを許可することと、Aclを使用してアクセスを制限することの違いは何ですか?一方の方法はもう一方の方法よりも安全ですか?

また、たとえば次のような「Cakish」の方法があるかどうか疑問に思いました。-管理者に編集アクションへのアクセスを許可する-学生に編集アクションへのアクセスを許可するが、特定のフィールドの変更を制限する。

たとえば、学生が次のフィールドを持つテーブルUsersを編集しているとします:username、password、group_id。彼はパスワードを編集できますが、group_idとユーザー名は編集できません。管理者は両方を編集できますが。私がこれを実装する方法は、ユーザーが投稿した後、コントローラー内で彼のgroup_idをチェックし、彼の特権に従ってフィールドusernameとgroup_idの設定を解除することです。これを実装する適切な方法ですか?

ありがとうございました。

4

1 に答える 1

1

ACL(またはアクセス制御リスト)は、誰が何にアクセスできるかというロジックをコードから分離する方法です。isAuthorized()を使用すると、アクセスの可能なタイプごとに手動でコードを追加する必要があります。また、ACLは、(再帰的な)グループ化とマトリックスのようなアクセスを許可します(「すべての戦士にアクセスを許可しますが、人種グレムリンの戦士にはアクセスを許可しません」など)。CakePHPのドキュメントは非常に広範囲です。

ただし、CakeのACLに個人的に欠けているのは、特定のアイテムへのアクセスを制限していることです。たとえば、学生は自分の結果を表示できますが、他の学生からは表示できません。つまり、彼は/ results / view / 10、/ results / view / 49、および/ results / view / 87を呼び出すことができますが、他の呼び出しはできません。ACLではこれを行うことができませんでした。

編集に関して:一般的に、すべてのデータを表示/投稿してから、不要と思われるものを削除することはお勧めできません。ある日、フィールドを忘れてしまうと、バグや脆弱性が発生します。フォームの改ざんを防ぐためにセキュリティコンポーネントを使用することをお勧めします。次に、アクセスレベルに応じて、ユーザーが編集できるフォームにこれらのフィールドのみを追加します。

CakePHPのドキュメントには、コントローラーのPOSTアクションで保存するフィールドを手動で追加するように指示されていますが、これは、フォームを使用したビューとコントローラーの2か所でフィールドのリストを維持する必要があることを意味します。アクセスレベルに基づいてフィールドを含める/除外するコードを追加すると、メンテナンスの問題が発生します。セキュリティを使用すると、改ざん防止ユーザーはPOSTデータを操作するためにフィールドを手動で追加できません。

于 2013-01-18T03:35:00.963 に答える