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哈哈,是的,我看到了^^