2

sfGuardPlugin 5.0.0 を使用して Symfony 1.4 で開発されたアプリケーションでセキュリティを設定しようとしています。

要件では、管理者ユーザーはすべての操作を実行でき、閲覧者はレコードの一覧表示と表示のみを行うことができます。

これは、モジュールのディレクトリ構成で使用している security.yml です。

index:
    is_secure: true
    credentials: [[ admin, viewer ]]

show:
    is_secure: true
    credentials: [[ admin, viewer ]]

all:
    is_secure: true
    credentials: [ admin ]

しかし、ビューアに許可されたアクションの 1 つを作成しようとすると、理由がわかりません。「許可されていません」というメッセージで停止します。

スタック トレースは次のとおりです。

1    sfPatternRouting   Connect sfRoute "sf_guard_signin" (/guard/login)
2    sfPatternRouting   Connect sfRoute "sf_guard_signout" (/guard/logout)
3    sfPatternRouting   Match route "homepage" (/) for / with parameters 
  array ( 'module' => 'strain', 'action' => 'index',)
4    sfFilterChain  Executing filter "sfRenderingFilter"
5    sfFilterChain  Executing filter "sfBasicSecurityFilter"
6    Doctrine_Connection_Mysql  exec : SET NAMES 'UTF8' - ()
7    Doctrine_Connection_Statement  execute : SELECT s.id AS s__id, s.first_name AS 
 s__first_name, s.last_name AS s__last_name, s.email_address AS s__email_address, s.username 
 AS s__username, s.algorithm AS s__algorithm, s.salt AS s__salt, s.password AS s__password, 
 s.is_active AS s__is_active, s.is_super_admin AS s__is_super_admin, s.last_login AS 
 s__last_login, s.avatar AS s__avatar, s.token AS s__token, s.notify_new_order AS 
 s__notify_new_order, s.notify_ready_order AS s__notify_ready_order, s.initials AS 
 s__initials, s.created_at AS s__created_at, s.updated_at AS s__updated_at FROM sf_guard_user 
 s WHERE (s.id = ?) LIMIT 1 - (25)
8    sfBasicSecurityFilter  Action "strain/index" requires credentials 
  "[admin, viewer]", forwarding to "sfGuardAuth/secure"
9    sfFilterChain  Executing filter "sfRenderingFilter"
10   sfFilterChain  Executing filter "InboxFilter"
11   Doctrine_Connection_Statement  execute : DELETE FROM notification WHERE 
   (status = ? AND updated_at < ?) - (2, 2012-05-19 14:21:05)
12   sfFilterChain  Executing filter "sfExecutionFilter"
13   sfGuardAuthActions Call "sfGuardAuthActions->executeSecure()"
14   sfPHPView  Render "sf_app_dir/modules/sfGuardAuth/templates/secureSuccess.php"
15   main   Call "sfGuardAuth->executeSignin_form()"
16   sfPartialView  Render "sf_app_dir/modules/sfGuardAuth/templates/_signin_form.php"
17   main   Set slot "error_message"
18   sfPHPView  Decorate content with "sf_app_dir/templates/login.php"
19   sfPHPView  Render "sf_app_dir/templates/login.php"
20   main   Get slot "error_message"
21   sfWebResponse  Send status "HTTP/1.1 403 Forbidden"
22   sfWebResponse  Send header "Content-Type: text/html; charset=utf-8"

どんな手掛かり?

4

2 に答える 2

1

最後に問題を発見しました。アプリケーションが 2 つの資格情報を要求していたのではなく、Symfony がテーブルのアクセス許可を調べていて、私がグループを使用していたことが問題でした。

すべての回答に感謝します。

于 2012-06-19T11:27:32.330 に答える
0

スタックトレースによると、ユーザーは資格情報と資格情報の両方 を持っている必要があります。adminviewer

そうでない場合、エラーは次のようになります ( [[ & ]]に注意してください) :

アクション「strain/index」には資格情報「[[admin, viewer]]」が必要で、「sfGuardAuth/secure」に転送されます

security.yml を再確認するか、質問にファイル全体を貼り付けてください。

于 2012-06-18T13:09:19.767 に答える