【发布时间】:2014-05-24 19:50:52
【问题描述】:
我是使用 AngularJS 的新手,想使用 REST 与 Grails 集成。虽然我找到了很多关于使用 Grails/AngularJS 执行 CRUD 操作的精彩教程,但我发现很少有帮助我了解根据登录用户限制从 Grails RESTful 服务返回到 Angular 的数据的最佳方法。我不想问我知道这里的一个意见问题有点不受欢迎,但在这种情况下,我认为它是相关的,并且对于其他人学习如何使用 Grails/Angular 构建现实世界的应用程序确实有益。
假设我们有一个简单的域类:
class Book {
String title
String author
static constraints = {
}
}
我们将其公开为 RESTful 控制器(普通版)
import grails.rest.RestfulController
class BookController extends RestfulController<Book>{
def springSecurityService
static responseFormats = ['json', 'xml']
BookController(){
super(Book)
}
}
就我而言,我使用的是资产管道 Grails 插件。我有一个角度控制器:
var book = angular.module('book', []);
book.controller('BookCtrl',
function ($scope, $http) {
$scope.getBook = function () {
$http.get('/myApp/book').
success(function (data) {
console.log("success: " + data);
$scope.book = data;
}).error(function (data) {
console.log("error: " + data);
$scope.book = data;
});
};
$scope.getBook();
}
);
和视图(缩写):
<div>
<table class="table table-hover">
<tr>
<th>Title</th>
<th>Author</th>
</tr>
<tr ng-repeat="b in book">
<td>{{b.title}}</td>
<td>{{b.author}}</td>
</tr>
</table>
</div>
当我只是寻找所有书籍对象的列表时,这很好用,我得到了一张漂亮的书籍表。但是当我想说限制基于用户登录的书籍返回时(假设在这种情况下它是用户拥有的书籍列表),我不确定什么可能是最好的继续方式。从身份验证的角度来看,我认为使用 Spring Security REST plugin 可能有助于将令牌作为参数传递给 BookController(假设我覆盖了 index() 方法)。然后我可以在 REST 响应中查找令牌并过滤结果。这似乎是正确的方法吗?感谢您的任何反馈,
【问题讨论】:
-
用户拥有的图书列表 - 在
Book域中是如何定义的?我们如何确定登录用户拥有哪本书?其他域类中是否存在映射? -
是的,它不在上面的代码中,但它可能是一些简单的东西,例如人和书之间的连接/查找表,并在控制器中以如下方式实现:
codeindex(user) { respond books = Book.findByUser(user)}code显然是一种简化 -
我并不真正担心缩小列表,因为我想知道在代码中的正确位置?它应该是 REST 控制器方法的一部分吗?并将身份验证令牌作为 GET 的一部分传递是处理它的正确方法吗?
标签: angularjs rest grails spring-security