有一个自定义登录表单,可以让用户访问同一页面上的某些内容。到目前为止,这个用户在SS数据库中存储为成员,如果用户在Page Class中具有这样的权限,我在登录后进行检查:
function isAllowed() {
if (Member::currentUser()) {
$PresseGroup = DataObject::get_one('Group', "Code = 'presse'");
$AdminGroup = DataObject::get_one('Group', "Code = 'administrators'");
if (Member::currentUser()->inGroup($PresseGroup->ID) || Member::currentUser()->inGroup($AdminGroup->ID)) {
return true;
}
}
}
在模板中我刚刚这样做了:
<% if isAllowed %>
SecretContent
<% end_if %>
确定到目前为止,但现在用户不会存储在silverstripe数据库中 - 它们存储在另一台服务器上。
在外部服务器上运行一个接受用户名和密码的小PHP脚本。该脚本只返回用户拥有权限:true或false。
我通过cURL调用该脚本。
我计划覆盖MemberLoginForm的dologin功能。现在我只是想知道如何在登录后检查用户是否获得了权限并显示内容...我试图在Page的控制器中设置一个变量,还是应该设置一个会话变量?多数民众赞成我的尝试(CustomLoginForm扩展了MemberLoginForm):
public function dologin($data) {
if(userHasPermission("user1", "pw")==true){
$this->controller->Test("test");
}
$link = $this->controller->Link();
$this->performLogin($data);
$this->controller->redirect($link);
}
我希望有人可以帮助我 - 我知道非常具体 - 问题。 很多人, 弗洛里安
答案 0 :(得分:1)
在SilverStripe中,您可以创建自定义身份验证器,这意味着用户可以使用存储在其他位置的帐户登录您的网站,甚至只需使用硬编码的用户和密码。 您可以查看OpenID Authentication Module有关如何操作的示例代码
但是对于你的任务,这甚至可能是复杂的解决方案,登录后如何执行Session::set('isAllowed', true);
之类的操作并检查是否允许用户查看:
function isAllowed() {
if (Member::currentUser()) {
$PresseGroup = DataObject::get_one('Group', "Code = 'presse'");
$AdminGroup = DataObject::get_one('Group', "Code = 'administrators'");
if (Member::currentUser()->inGroup($PresseGroup->ID) || Member::currentUser()->inGroup($AdminGroup->ID)) {
return true;
}
}
// if Member::currentUser() is not allowed to view,
// return the session, which is either set to true or it returns null if not set
return Session::get('isAllowed');
}