Trait 可以扩展模型的方法 .. 下面去创建一个 Trait ... aodnis make:trait ,名字叫 is .. 然后再打开 User 模型 ...
在模型的 boot 方法里面,用一下 this.addTrait ,在用户模型上,添加一个叫 is 的 trait .. 这样在这个 trait 里面定义的方法,就可以用在用户模型上了 ..
然后找到创建的 is 这个 trait ..
在这个 trait 里面添加一个可以得到用户角色列表的方法 .. 方法的名字是 getRoles ..
方法里面添加一个 _roles .. await 用一下 this.roles().fetch() ,使用模型上的 roles 这个关系,得到相关的角色列表 ..
下面再添加一个 roles .. 它的值是 _roles.toJSON() .. map 一下 .. 当前项目叫 role ,返回的是 role 里的 name 的值,就是角色的名字 ..
最后 return 一下这个 roles ..
在这个 Trait 的 register 方法里面 .. 在 Model 的 prototype 上面添加一个 getRoles 方法 .. 让它等于 this.getRoles ..
试验
下面可以找个地方去试一下 .. 打开 routes.js ..
找到之前我们在这里添加的这个 demo/acl ... 先找到一个用户 ... 然后添加一个 roles ... 用一下用户模型上的 getRoles ... 得到一个角色列表 ..
再 return 这个角色列表 ...
在浏览器上面,访问一下 demo/acl ...
现在页面上显示的就是 id 号是 1 的这个用户拥有的角色 ..
再试一下 ... 修改一下用户的 id 号 ...
回到浏览器,刷新一下页面 ...
现在得到的就是 id 号是 2 的这个用户的用户角色 ...