0

私のアプリでは、次のような多対多の関係に従って、組織へのアクセス権をユーザーに付与する必要があります。

App.User = DS.Model.extend({
  fullname: DS.attr('string'),
  password: DS.attr('string'),
  administrator: DS.attr('boolean'),
  organisation_users: DS.hasMany('organisation_user', {async: true})
});

App.OrganisationUser = DS.Model.extend({
  organisation: DS.belongsTo('organisation', {async: true}),
  user: DS.belongsTo('user', {async: true}),
  administrator: DS.attr('boolean')
});

App.Organisation = DS.Model.extend({
  fullname: DS.attr('string', {defaultValue: 'Unnamed University'}),
  description: DS.attr('string'),
  organisation_users: DS.hasMany('organisation_user', {asynch: false}),
});

認証に Ember SimpleAuth を使用しています。したがって、前の質問に対するこの回答に基づいて、次のように OrganizationController に isAuthorized を実装しました。

App.OrganisationController = Ember.Controller.extend({

  //Determine whether the logged in user is authorised
  isAuthorised: function() {
    if(!this.get('session.isAuthenticated')) {
      console.log("Not logged in...");
      return false;
    }

    console.log("Does user [" + this.get('session.user.id') + "] have access to organisation [" + this.get('model.id') + "]?");
    if(this.get('session.user.administrator')) {
      console.log("Yes, because they are an administrator.");
      return true;
    } else {
      console.log("Well, they are not an administrator so...");
    }
    console.log("We need to check " + this.get('model.fullname') + " for authorised users.");
    this.get('model.organisation_users').forEach(function(org_user){
      org_user.get('user').then(function(user) {
        console.log(user.get('fullname') + " has access");
      });
    });
  }.property('model', 'session.user'),

問題は、これから値を返す方法がわからないことです。また、OrganisationRoute をロードすると問題なく動作するように見えますが、別のルートをロードしてこのルートに遷移すると、失敗します。

Uncaught TypeError: Cannot read property 'resolve' of undefined

Uncaught Error: Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.

4

1 に答える 1