我在这个应用程序中有两个路由由在rails侧具有访问控制逻辑的模型支持。因此,当他们第一次加载到应用程序时,他们有一个isUnlocked
属性,我在模型加载后检查。如果未解锁该属性,则路由应重定向。
所以,如果我的路由器是这样的:
this.route('thing', { path: 'thing/:thing_id' }, function() {
this.route('resource', { path: 'resource/:resource_id' });
});
我的“资源”路线扩展如下:
import AuthenticatedRoute from 'doki/routes/authenticated';
export default AuthenticatedRoute.extend({
requireDean: false,
activate() {
this._super();
this.checkAccess();
},
afterModel() {
this._super();
this.checkAccess();
},
resetController() {
this._super();
this.checkAccess();
},
checkAccess() {
// here is where I'll check the model's isUnlocked property and
// redirect if it's false or not set
console.log('checkAccess');
}
});
当我输入/ thing / 1 / resource / 1时,资源= 1的模型由ThingResourceRoute加载,但如果在商店中已经加载了resource = 2,如果我点击到/ thing / 1 / resource / 2,activate
不会触发,setupController
不触发等,所以我不确定在哪里进行checkAccess()测试。
每当URL更改时,检查isUnlocked属性的最佳位置是什么,因为“activate”,“resetController”等等,当URL更改为相同路由但不同的项目具有不同的isUnlocked时不会触发属性。
我是否可以实现一个永远被调用的钩子?在renderTemplate
中进行访问检查似乎有效,但这似乎不是正确的地方。
我是否应该在通过API调用更新模型后使模型无效?如果我在本地将isUnlocked设置为true(并且不通过API保持模型),那么我将在路由/控制器链中添加检查,以便每次尝试“访问”该模型时都会检查它?
答案 0 :(得分:1)
看起来每次输入URL时都会触发SELECT JCTRANSACTIONS.Job,
JCTRANSACTIONS.CostCode,
JCTRANSACTIONS.Date,
JCTRANSACTIONS.Amount,
JCJOB.Description,
JCCOSTCODE.Description
FROM "\\Network\".JCCOSTCODE JCCOSTCODE,
"\\ Network \".JCJOB JCJOB,
"\\ Network \".JCTRANSACTIONS JCTRANSACTIONS
WHERE
JCJOB.Job = JCTRANSACTIONS.Job AND
JCCOSTCODE.Cost_Code = JCTRANSACTIONS.Cost_Code AND
JCCOSTCODE.Job = JCJOB.Job AND
JCCOSTCODE.Job = JCTRANSACTIONS.Job
事件 - 即使模型已经加载,控制器已经设置,并且挂钩全部被触发 - 所以我要检查didTransition
中的模型:
didTransition