1時間目
CSS適用ができねえええええ。
とおもったら。
ln -s ../css css
自分のログで大文字で書いてた(テペペロ☆
2時間目
comment_listで
コメントと名前とカテゴリの編集をできるようにする。ヒントはreply_add。
exで画像のようだがそこまではムリポ。
3時間目
☆symfonyのアクセス制御
管理画面、マイページなどのように認証されたユーザで
特定の権限を持つユーザだけが閲覧や操作を行えるようにする。
/bbs2/lib/model/MemberPeer.php
static public function retrieveByPassword($mailaddress,$password) {
$c = new Criteria();
$c->add(self::MAILADDRESS, $mailaddress);
$c->add(self::PASSWORD, $password);
return self::doSelectOne($c);
}
4時間目
☆認証
symfonyは、アクセスしているユーザに関する情報はユーザークラス($this->getUser())が持っている。
ユーザクラスに権限の情報を付与・削除することと、各アプリケーションごと、
モジュールごとのsecurity.ymlでアクセス制御を実現する。
認証済みかどうか $this->getUser()->isAuthenticated();
どの権限を持つかどうか $this->getUser()->hasCredential("member");
この二つを主に利用する。
制限のルールを書くのはsecurity.ymlで行う。
/backend/config/security.ymlに以下のように記述
all:
is_secure: on #認証済みの必要がある
credentials: [ member ] #必要な権限を設定する
モジュールにもsecurity.ymlを置いて上記のように記述することでモジュールごとの
権限管理を行うこともできる。
あと複数設けることもできるが、orにしたい場合は
credentials: [[member,admin]]のようになる。
backendにlogoutモジュール作成して
ログアウト処理。backendからアウトしてTOPへ。
action側(しか要らない)
public function executeIndex()
{
//未認証にする
$this->getUser()->setAuthenticated(false);
//権限をクリア
$this->getUser()->clearCredentials();
//TOPへ移動
$this->redirect('http://www.shonanbbs.com'');
return sfView::SUCCESS;
}
ログイン処理→ログインできたらログアウト→defaultへ遷移。
ログイン処理+α TOPからのリンク。をやりました。まとめソース↓
5時間目
admin_ynカラム追加してif文で判定。
$this->getUser()->setAttribute('member_id', $member->getId(),sfConfig::get('sf_session_name'));
第3引数はセッション内に名前空間(name_space)を必ず設定。
区切りでセットすることで区切りごと削除が可能となる。
sesstion_nameはプロジェクト直下のconfigのsetting.ymlに記述。
☆練習問題
mypageアプリケーション作成
権限Credentialはmemberを指定
adminとmemberでログインしたあとの遷移を変更。
てか最終的な情報しか残せなかたよ。ごめんよー。
frontのloginモジュール、action側
public function executeIndex()
{
$this->mailaddress = $this->getRequestParameter('mailaddress');
$this->password = $this->getRequestParameter('password');
if ($this->mailaddress != '' && $this->password != '') {
//メンバーテーブルに入力されたメールアドレス、パスワードで
//指定出来る行があるかどうか
//MemberPeerに$this->mailaddress, $this->passwordの引数を渡す
$member = MemberPeer::retrieveByPassword
($this->mailaddress, $this->password);
if ($member){
// ログイン状態にする
//認証処理は$this->getUser()で受け取れるuserオブジェクトで
//設定できる。セッション名をいちいち変えなくていい。
$this->getUser()->setAuthenticated(true);
//権限をクリア
$this->getUser()->clearCredentials();
// 会員情報をセッションにセット
$this->getUser()->setAttribute('member_id',
$member->getId(),sfConfig::get('sf_session_name'));
$this->getUser()->setAttribute('nickname',
$member->getNickname(), sfConfig::get('sf_session_name'));
if($member->getAdminYn() == 'y') {
//admin権限付与
$this->getUser()->addCredential('admin');
$this->redirect('/backend');
}elseif ($member->getAdminYn() == 'n') {
//ここでは一般会員権限のみ付与
$this->getUser()->addCredential('member');
// 会員情報をセッションにセット
$this->getUser()->setAttribute('member_id',
$member->getId(),sfConfig::get('sf_session_name'));
$this->getUser()->setAttribute('nickname',
$member->getNickname(), sfConfig::get('sf_session_name'));
$this->redirect('/mypage');
}
}
$this->errormsg = "あてはまるユーザが登録されていません";
}
return sfView::SUCCESS;
}
frontのloginモジュール、index側
<?php slot('pankuzu');?>HOME<?php end_slot();?>
<?php slot('title');?>
TOP
<?php end_slot();?>
<?php slot('sidemenu');?>
<?php include_partial("global/menu", array('now' => 'login'));?>
<?php end_slot();?>
<?php use_helper('Validation') ?>
<?php echo form_tag('login/index');?>
<div class="tblData">
<?php if ($errormsg != ''):?>
<div><?php echo $errormsg;?></div>
<?php endif;?>
<table>
<tr>
<th>メールアドレス</th>
<td
<?php if ($sf_request->haserror('mailaddress')) :?>
style="background-color:#ffcccc;"
<?php endif;?>>
<?php echo input_tag('mailaddress', $mailaddress, array('size' => 50));?>
<?php echo form_error('mailaddress');?></td>
</tr>
<tr>
<th>パスワード</th>
<td><?php echo input_tag('password', $password, array('size' => 50));?>
<?php echo form_error('password');?></td>
</tr>
</table>
</div>
<?php echo submit_tag('ログインする');?>
</form>
mypageログイン時TOP表示。
mypageのsecurity.yml
default:
is_secure: on
credentials: [ member ]
action側
public function executeIndex()
{
$this->getUser() -> getAttribute('member_id',
NULL,sfConfig::get('sf_session_name'));
$this->member = MemberPeer::retrieveByPK($member_id);
//$this->comments = CommentPeer::retrieveByComment_Id($cooment_id)
return sfView::SUCCESS;
}
mypageのindex。
<?php slot('title');?>
MYPAGE
<?php end_slot();?>
<?php slot('sidemenu');?>
<?php include_partial("global/menu", array('now' => 'member_add'));?>
<?php end_slot();?>
mypageのaction。
public function executeIndex()
{
$this->getUser() -> getAttribute('member_id',
NULL,sfConfig::get('sf_session_name'));
$this->member = MemberPeer::retrieveByPK($member_id);
//$this->comments = CommentPeer::retrieveByComment_Id($cooment_id)
return sfView::SUCCESS;
}
奇跡といいたい。
でけた。
ていうか現状ではlogoutがbackendしかないからmypageでログアウトするのって
ログインしなおすんだよね・・・・・・権限で判定??
補足設定
backendのsettings.ymlを下記に変更。
#認証できない時はloginページに遷移
login_module: default # To be called when a non-authenticated user
login_action: login # Tries to access a secure page
#管理者権限が無い場合はエラー表示
secure_module: default # To be called when a user doesn't have
secure_action: secure # The credentials required for an action
sessionの有効期限はsettings.ymlの95行目
# timeout: 1800 # Session timeout, in seconds
だよー。
来週は自分のプロフィールや投稿のみ編集可能にする。
とバリデートするそーな。
自分的お勧め
PHPエラーの意味を教えてくれるところ