我的应用程序在技术上有两个区域,全局区域(反馈,用户配置文件,用户设置等)和组区域(联系人,项目,组配置文件,组设置等).
我正在使用RBAC DBManager作为全局区域,它工作正常,但我遇到了实现组区域授权机制的问题.
原因是组可以在用户之间共享,并且用户可以在group_access表(id,group_id,user_id,item_name)中具有多个分配,因为它们可以是多个组的成员,并且它们可以具有不同的权限级别.那些团体.
这是我的身份验证设置:
$auth = Yii::$app->authManager;
// group permissions
$manageGroupUsers = $auth->createPermission('manage_group_users');
$manageGroupUsers->description = 'Manage Group Users';
$auth->add($manageGroupUsers);
$manageGroupSettings = $auth->createPermission('manage_group_settings');
$manageGroupSettings->description = 'Manage Group Settings';
$auth->add($manageGroupSettings);
// app permissions
$manageAppUsers = $auth->createPermission('manage_app_users');
$manageAppUsers->description = 'Manage App Users';
$auth->add($manageAppUsers);
$manageAppGroups = $auth->createPermission('manage_app_groups');
$manageAppGroups->description = 'Manage App Groups';
$auth->add($manageAppGroups);
$manageAppSettings = $auth->createPermission('manage_app_settings');
$manageAppSettings->description = 'Manage App Settings';
$auth->add($manageAppSettings);
$manageAppFeedback = $auth->createPermission('manage_app_feedback');
$manageAppFeedback->description = 'Manage App Feedback';
$auth->add($manageAppFeedback);
// group roles
// -- create role
$groupUser = $auth->createRole('group_user');
$groupUser->description = …Run Code Online (Sandbox Code Playgroud) 我使用框架Yii2与他们的Pjax实现.控制器代码添加了一个成功传递响应的标题"X-Pjax-Url".
Pjax的重定向通过pjax.js方法在Chrome,Safari和Firefox中处理得很好,但在IE11中失败了.
当我使用包含的调试器并查看响应头时,标头就在那里,并且url是正确的,但是IE11没有读取它.
有任何想法吗?
**2015年9月7日更新
控制器代码:
return $this->redirect(['secure/dashboard']);
Run Code Online (Sandbox Code Playgroud)
以下是有关如何使用此方法的文档(yii\web\Controller)的链接,该方法是此方法(yii\web\Response)方法的快捷方式.
再一次,这适用于Chrome,Safari和Firefox,而不是IE11.
我正在使用此代码段来验证xhr响应,该响应返回null.
// pjax complete
$(document).on('pjax:complete', function (event, xhr, textStatus, options) {
alert(JSON.stringify(xhr));
var url = xhr.getResponseHeader('X-Pjax-Url');
if (url) {
window.location = url;
}
});
Run Code Online (Sandbox Code Playgroud)
在上面的图像中,您可以看到标题实际上正在发送,就好像IE正在正确读取它一样.
Pjax.js文件实际上处理重定向,我只是使用该代码段进行调试.
我正在我的提交按钮上创建一个加载指示器,并使用registerJs函数将"start"过程附加到beforeSubmit事件.
它第一次正常工作,但在重新加载Pjax容器后,再次提交表单时不会触发事件.
我将整个视图文件放在Pjax容器中,以便正确显示flash消息.
这是main.php布局文件片段:
<?php Pjax::begin([
'id' => 'pjax-container',
'enablePushState' => false,
]); ?>
<?= Alert::widget(); ?>
<?= $content; ?>
<?php Pjax::end(); ?>
Run Code Online (Sandbox Code Playgroud)
这里是registerJs函数,位于main.php中:
<?php
$js = <<< 'SCRIPT'
$('#form').on('beforeSubmit', function(){
alert('Submitted...');
//$("#spinner").fadeIn();
});
SCRIPT;
$this->registerJs($js);
?>
Run Code Online (Sandbox Code Playgroud)
这是activeForm:
<?php $form = ActiveForm::begin(['id' => 'form', 'options' => ['data-pjax' => true]]); ?>
<?= $form->field($model, 'name')->textInput(['type' => 'text']) ?>
<?= $form->field($model, 'email')->textInput(['type' => 'email']) ?>
<?= $form->field($model, 'subject')->textInput(['type' => 'text']) ?>
<?php
echo $form->field($model, 'message')->textArea(['rows' => 6]);
echo $form->field($model, 'verify_code')->widget(Captcha::className(), [
'captchaAction' => …Run Code Online (Sandbox Code Playgroud)