0

データベース内のデータを管理する小さなアプリケーションを開発しています。私は Smarty テンプレート エンジンを使用してすべてを MVC スタイルで動作させ、PHP スクリプトがコントローラーとして機能し、smarty テンプレートがビューとして機能するようにして、コードをできるだけクリーンで構造化するようにしています。

ここで、パーミッションの概念を紹介したいと思います。たとえば、あるユーザーは一部のデータを表示および編集する権限を持ち、別のユーザーは同じデータの別の部分を表示または編集する別の権限を持つことができます。

2 か所でチェックを行っています。 1. アクションを実行する前に、ユーザーが権限を持っているかどうかをチェックするコントローラ自体。2. ユーザーがアクセス許可を持っているかどうかを確認し、それぞれのコントロールを無効にするか、読み取り専用に変更するビュー (スマート テンプレート)。

ただし、後半は私の好みでは少し冗長になりすぎています。

<textarea id="description" name="description" rows="3" 
{if !$user->can(Permissions::EDIT_DESCRIPTION)}readonly{/if}>{$item['description']|default:''}</textarea>     

Smarty を使用して同じ結果を達成するために、もう少し宣言的または簡潔なこれに対するより良いアプローチはありますか?

4

1 に答える 1

1

の全体とそのメソッドと定数を Smarty にリークするのではなく$user、パーミッションをチェックし、それに基づいて何か役立つことを行うカスタム修飾子を 1 つまたは 2 つ作成します。

check_access左側にアクセス タイプ (最初のパラメーター) があり、右側に true と false の出力 (2 番目と 3 番目のパラメーター) がある修飾子:

<textarea id="description" name="description" rows="3" {'EDIT_DESCRIPTION'|check_access:'':'readonly'}>{$item['description']|default:''}</textarea>

または、より具体的には、readonly必要に応じて属性を出力するものです。いい名前が思いつきませんが、

<textarea id="description" name="description" rows="3" {'EDIT_DESCRIPTION'|readonly_if_no_access}>{$item['description']|default:''}</textarea>
于 2013-09-22T22:19:25.067 に答える