我已经实现了一个项目集合(模型、集合、集合的视图、单个项目的视图和模板文件)。除此之外,我还有一些会话变量(例如用户凭据/会话属性/权限)。我想根据用户权限为每个项目显示不同的字段和选项(普通用户可以查看它们,管理员可以编辑/删除等)。最干净的方法是什么?通过视图构造函数传递会话或向每个模型添加对会话结构的引用的任何方式似乎都不正确。听起来我想要的是让这些会话结构全局化,并希望从我的视图模板中访问它,但我怀疑这是正确的方法。
谢谢
我已经实现了一个项目集合(模型、集合、集合的视图、单个项目的视图和模板文件)。除此之外,我还有一些会话变量(例如用户凭据/会话属性/权限)。我想根据用户权限为每个项目显示不同的字段和选项(普通用户可以查看它们,管理员可以编辑/删除等)。最干净的方法是什么?通过视图构造函数传递会话或向每个模型添加对会话结构的引用的任何方式似乎都不正确。听起来我想要的是让这些会话结构全局化,并希望从我的视图模板中访问它,但我怀疑这是正确的方法。
谢谢
我解决相同问题的方法是通过权限检查设置模型和集合,然后在模型类中实现逻辑,如下所示:
PermissionModel = Backbone.Model.extend({
hasPermission: function(permission){
// pessimistic default implementation, override in inherited model classes
return false;
}
});
从这个模型继承你的模型,然后如果应用程序相对简单,则使用全局标志检查权限逻辑,如果应用程序更复杂,则使用某种 ACL。例如。
hasPermission: function(permission){
switch (permission) {
case "read":
return true;
case "write":
return window.app.user.isAdmin(); //app.user is defined in the app initialization
default:
return false;
}
}
在您的模板中,您可以使用此逻辑。如果你使用 Handlebars,你可以定义一个模板助手:
{{#ifPermission model "read"}}You have permission{{/ifPermission}}