7

JavaScript フロント エンド アプリケーションを使用している場合、アクセス許可/ACL を処理するためのベスト/一般的な方法は何ですか? たとえば、いくつかの要素を表示/非表示にしたいなどです。もちろん、安全ではありませんが、まだビューレイヤーにあります。これを制御するにはどうすればよいですか。

クライアント側のフレームワークとして BackboneJS (Marionette を使用) を使用しているため、jQuery、Underscore などを使用しています。

私は高レベルで考えています。どうにかしていくつかのルートを無効にすることができます。いくつかの調査が必要ですが、できますRouter.on("route", checkPermissions)

次に、ビューレイヤーで、要素を非表示/表示します...これを処理する最善の方法はまだわかりません。モデルにいくつかの権限オブジェクトを渡す必要があります...

4

2 に答える 2

6

画面上で要素を非表示/表示にするために、次のようなインライン チェックをテンプレートで行います。

<% if (user.isInRole('ADMIN', 'MNGR')) { %>
    <li <% page == "store" ? print('class="active"') :'' %>>
    </li>
<% } %>

アクセス許可を確認するために、ユーザー モデル内に次のヘルパー関数を追加しました。

isInRole: function (rr) {
    var self = this;
    $.each(rr, function(i) {
        if (rr[i] === self.currentRole) {
            alert('pass');
        }
    });
}

必要な権限の実際のチェックはサーバー側で再度行われるため、これで十分安全だと思います。いくつかのコントロールを非表示にすることで、アプリケーションを介してユーザーをガイドするだけであり、ユーザーが必要な権限を持っていないため、アクションと混同されることはありません。

このようなアプローチでは、REST サービスを介して動的に取得されるデータを非表示にすることはなく、ページの静的要素のみを非表示にします。

于 2013-06-15T07:03:57.343 に答える
1

データ層からアクセスできない属性を削除する変更された解析ロジックを使用して、カスタムBaseModel/クラスを作成します。BaseCollection後で、このデータ隠蔽ロジックをサーバー側に透過的に転送して、本番環境に価値のあるセキュリティを得ることができます.

パーミッション データに関して_securityは、Model/Collection クラスの属性で宣言するのが適しています。

ビューでは、akoskm が提案した条件付きロジックを使用します

于 2013-06-15T08:56:29.663 に答える