Ember.js 如何验证模板中的ACL
在显示链接/操作之前,模板应该如何查找用户对特定路由的访问权限 考虑到路由已经包含授权角色的列表,简单的模板助手/组件是否应该查找视图属性并验证访问 (类似于Ember.js 如何验证模板中的ACL,ember.js,Ember.js,在显示链接/操作之前,模板应该如何查找用户对特定路由的访问权限 考虑到路由已经包含授权角色的列表,简单的模板助手/组件是否应该查找视图属性并验证访问 (类似于{{#if有权访问'items.new'}}?) 路由当前使用简单的ACL解决方案进行“保护”: AclRouteMixin import Ember from 'ember'; var accountTypes = { 1: 'member', 2: 'manager', 3: 'owner' }; expor
{{#if有权访问'items.new'}}
?)
路由当前使用简单的ACL解决方案进行“保护”:
AclRouteMixin
import Ember from 'ember';
var accountTypes = {
1: 'member',
2: 'manager',
3: 'owner'
};
export default Ember.Mixin.create({
beforeModel: function beforeModel(transition) {
this._super(transition);
var accountType = this.get('session.accountType');
var role = accountTypes.hasOwnProperty(accountType) ? accountTypes[accountType] : 'unknown';
if (this.get('roles') && !this.get('roles').contains(role)) {
transition.abort();
this.transitionTo('unauthorized');
}
}
});
路线
export default Ember.Route.extend(AuthenticatedRouteMixin, AclRouteMixin, {
roles: [ 'manager', 'owner' ]
});
{{#if session.policy.canCreateItems}}{{link-to 'New Item' 'items.new'}}{{/if}}
{{#if item.policy.canEdit}}{{link-to 'Edit' 'items.edit' item}}{{/if}}
编辑
由于服务器知道权限,因此包含
策略
对象(或每个实体属性)要比尝试复制授权逻辑容易得多。我的方法是加载所有其他路由扩展的身份验证路由上的权限,至于检查和显示链接,我使用了一个组件:
import Ember from 'ember';
var Component = Ember.Component;
export default Component.extend({
hasPermission: function() {
var permission = this.get('permission');
return this.get('auth.permissions').indexOf(permission) !== -1;
}.property('permission')
});
至于模板:
{{#if hasPermission}}
{{yield}}
{{/if}}
只需从链接中调用:
{{#can-do permission="view_tables"}}
{{link-to "tables" "tables" class="nav__link"}}
{{/can-do}}
希望能有帮助。如果您有任何问题,请告诉我。(链接方式)介绍了一种非常简单的设置身份验证/ACL的方法
会话对象(或每个API响应)可以包含一个策略
对象,该对象包含真
/假
值
模板
export default Ember.Route.extend(AuthenticatedRouteMixin, AclRouteMixin, {
roles: [ 'manager', 'owner' ]
});
{{#if session.policy.canCreateItems}}{{link-to 'New Item' 'items.new'}}{{/if}}
{{#if item.policy.canEdit}}{{link-to 'Edit' 'items.edit' item}}{{/if}}
验证器(如果使用ember简单身份验证
)
API响应
{
"items": [{
...
policy: {
can_delete: true,
can_view: true,
can_edit: true
}
}],
"policy": {
can_create: true
}
}
可能与youThanks@MilkyWayJoe有关,视频真的很有帮助。服务器已经像在视频中一样实现了ACL和其他权限管理。感谢您的回答。在评估了不同的选项后,我选择了一些接近@MilkyWayJoe()链接的话题。session对象使用
CandeletItem
保存policy
散列,模板使用简单的if:{{{{if session.policy.CandeletItem}}{{/if}
进行计算。policy
对象可能包含帮助函数。@MartinSamson哈哈,是的,我看到了^^