【问题标题】:Roles - Parse.com Javascript角色 - Parse.com Javascript
【发布时间】:2015-05-18 14:24:16
【问题描述】:

目前,我有允许 (_User) 表中的所有用户登录的 javascript。我在角色表中设置了一个名为 (Admins) 的角色,并将一个用户分配给该角色。这会是一个 if 语句吗?

目前这是用户成功登录的方式

$scope.logIn = function(form) {
Parse.User.logIn(form.username, form.password, {
  success: function(user) {
    $scope.currentUser = user;
    $scope.$apply();
    window.location.href = "TEST.html";
  },

【问题讨论】:

  • 你能澄清一下“这会是一个 if 语句吗?”这个问题?是不是,你想知道程序如何判断登录用户是否属于管理员角色?
  • 是的,我希望只有具有管理员角色的用户才能登录。@danh

标签: javascript parse-platform roles


【解决方案1】:

很容易检查任何用户是否属于某个角色。唯一棘手的部分是要意识到检查包括一个查询,因此是一个异步操作。首先,一个通用的角色检查函数:

function userHasRole(user, roleName) {
    var query = new Parse.Query(Parse.Role);
    query.equalTo("name", roleName);
    query.equalTo("users", user);
    return query.find().then(function(roles) {
        return roles.length > 0;
    });
}

这会返回一个用布尔值实现的承诺,所以你可以这样称呼它:

var currentUser = Parse.User.current();
// is the user an "admin"?
userHasRole(currentUser, "admin").then(function(isAdmin) {
    console.log((isAdmin)? "user is admin" : "user is not admin");
});

在您的代码中像这样应用它。在视图中:

<form role="form" name="loginForm">
    <div class="form-group">
        <label>Email</label>
        <input type="email" class="form-control" name="email" ng-model="user.username" />
    </div>
    <div class="form-group">
        <label>Password</label>
        <input type="password" class="form-control" name="password" ng-model="user.password" />
    </div>
    <div class="form-group">
        <button class="btn btn-ar btn-primary" ng-click="pressedLogIn()">Log in</button>
    </div>
</form>

在控制器中:

(function() {
    'use strict';
    angular.module('myApp.controllers').controller('LogInController', LogInController);

    LogInController.$inject = ['$scope'];

    function LogInController($scope) {
        $scope.user = { username:"", password:""};

        function userHasRole(user, roleName) {
            // defined exactly as above
            // my real app has a user service, and this would be better placed there
        }

        $scope.pressedLogIn = function() {
            if ($scope.loginForm.$valid) {
                Parse.User.logIn($scope.user.username, $scope.user.password).then(function(user) {
                    $scope.user = user;
                    return userHasRole(user, "administrator");
                }).then(function(isAdmin) {
                    alert("user is admin = " + isAdmin);
                }, function(e) {
                    alert(error.message);
                });
            }
        };
    }
})();

【讨论】:

  • 嗨@danh它似乎没有工作..它说'管理员'配置文件的'用户是管理员'但是当我刷新页面时它说'用户不是管理员'并且非管理员也一样 - ('用户是管理员' - 我刷新它说用户不是管理员'。有什么想法吗?
  • @NathanGreen,这很奇怪。我可以想象在重新加载后发生的唯一状态变化是当前用户离开。如果您第三次重新加载会发生什么?
  • 我仍然得到随机值 - 它说不是管理员然后是管理员等等。出于安全原因,我附上了一个 JSFiddle(带有 Parse ID 和脚本) - 你可以查看一下吗?看看你有没有给我指点。 jsfiddle.net/NathanGreen/0jo3cnt0
  • @NathanGreen,我无法理解小提琴。它有登录按钮的 ng-click 调用参数不匹配的登录函数,并且该函数似乎在任何登录发生之前在 currentUser 上运行,并且不清楚您如何使用 $scope.apply() 查看结果等等。所以我进行了编辑以包含我在真实应用程序中运行的几乎确切的登录信息。希望你会发现它很有用。
  • 该代码完美运行 - 我在 Parse javascript 文件和另一个 javascript 文件之间存在一些冲突,但现在一切正常 - 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 2016-01-17
  • 2016-01-19
  • 2016-03-25
  • 2013-09-29
  • 1970-01-01
  • 2014-09-21
相关资源
最近更新 更多