2

ログインしたユーザーの役割に基づく差分アクセスを含む平均スタック Web アプリケーションに取り組んでいます。admingovtボランティアなど、いくつかの異なる役割があります。

1. 役割に基づいてフロント エンドを管理する方法は?

現在、私は役割ごとにisAdmin、isVolunteer、isGovtなどのグローバルフラグを設定しており、それらの値に基づいて、使用してさまざまなUIを表示できますdata-ng-if = "Global.isAdmin"

このアプローチは正しいですか。そうでない場合は、UI を処理する正しい方法を提案してください。

2. ユーザーが認証を受けていない場合、バックエンドを管理してルートをリダイレクトする方法は?

現在、angular-permissionrbacを使用しようとしていますが、アプリケーションでこれらを正常に使用できません。平均スタックWebアプリのロールベースのアクセス制御のベストプラクティスを教えてください。

angular-permissionを使用しようとしたときに、作成したロールをルート ファイルにリンクできませんでした。

これはロールモジュールです。

angular.module('mean.users', ['permission'])
.run(['permission', 'Global', '$q',
    function(Permission, Global, $q) {
        console.log('not anonumous');
        Permission
            .defineRole('anonymous', function(stateParams) {
                var deferred = $q.defer();
                if (Global.user) {
                    deferred.resolve();
                } else {
                    deferred.reject();
                }
                return deferred.promise;
            })
            .defineRole('admin', function(stateParams) {
                if (Global.isAdmin) {
                    deferred.resolve();
                } else {
                    deferred.reject();
                }
                return deferred.promise;
            })
            .defineRole('govt', function(stateParams) {
                if (Global.isGovt) {
                    deferred.resolve();
                } else {
                    deferred.reject();
                }
                return deferred.promise;
            })
            .defineRole('volunteer', function(stateParams) {
                if (Global.isVolunteer) {
                    deferred.resolve();
                } else {
                    deferred.reject();
                }
                return deferred.promise;
            });

    }
]);

ルートファイルで構成された上記のロールをリンクする方法

$stateProvider
        .state('create user', {
            url: '/users/create',
            templateUrl: 'users/views/create.html',
            resolve: {
                loggedin: checkLoggedin
            }
        })
        .state('all users', {
            url: '/users/list',
            templateUrl: 'users/views/list.html',
            data: {
                permissions: {
                     only: ['admin'],
                    redirectTo: 'home'
                }
            }
        })
        .state('show user', {
            url: '/users/:userId/view',
            templateUrl: 'users/views/view.html',
            resolve: {
                loggedin: checkLoggedin
            }
        })
        .state('edit user', {
            url: '/users/:userId/edit',
            templateUrl: 'users/views/edit.html',
            data: {
                permissions: {
                     only: ['admin']
                }
            }
        })
        .state('myprofile', {
            url: '/users/:userId/me',
            templateUrl: 'users/views/myprofile.html',
            resolve: {
                loggedin: checkLoggedin
            }

        });
4

1 に答える 1