5

CanCanパーミッションをemberjsにシリアル化する方法を知っている人はいないかと思いました。Jo_LissによるこのStackOverflowQ&Aを見て、active_model_serializersを使用してパーミッション(CanCanなど)をシリアル化する方法を説明しましたが、そのレベルで停止しました。また、ここにリンクされているこの記事では、emberjs側で権限を確認する方法について説明していますが、バックエンドからemberjsに権限をシリアル化する方法については説明していません。

「admin」、「author」、「user」の3種類のユーザーロールが必要であり、emberjsでCanCan権限を使用して、ログインルートに入るとアクセスできるものを制御したいと考えています。

4

1 に答える 1

9

UserSerializer を使用して、ユーザーの CanCan アビリティをシリアル化できます。

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name, :email, :ability

  def ability
    Ability.new(self).as_json
  end
end

それは次のようなものを返します:

user: {
  id: 1,
  name: "xxx",
  email: "xxx",
  ability: rules: [
    {
      match_all: false,
      base_behavior: false,
      actions: [
        "edit"
      ],
      subjects: [
        "user"
      ],
      conditions: { },
      block: null
    },
    {
      match_all: false,
      base_behavior: true,
      actions: [
        "read"
      ],
      subjects: [
        "user"
      ],
      conditions: { },
      block: null
    }
  ]
}

ある種の缶を実装する必要がありますか?そしてできませんか?アビリティを処理する JavaScript のヘルパー。

それが役立つことを願っています。

于 2012-11-11T15:11:37.720 に答える