CakePHP3チュートリアルの「Restricting Bookmark Access」実装後のページアクセス制限について
最近RC2も出て、そろそろいじってみようかな?といったタイミングでしたので、CakePHP3のBoomarkerTutorialをやってます。
チュートリアルのパート2にて、ログイン、ログアウトの実装後に、ログイン状態によって特定のページ以外へのアクセスを制限する「Restricting Bookmark Access」の項があります。
ここで、AppControllerに対して
public function isAuthorized($user) { return false; }
の追加と、
public function initialize() { ... $this->loadComponent('Auth', [ 'authorize'=> 'Controller', ...
の設定を行っていますが、これにより全てのControllerにてページへのアクセスが制限されてしまいます。
チュートリアル内では、BookmarksController.php の isAuthorized() を実装して、ログイン状態によってブックマークページへのアクセスを行えるようにしていますが、ユーザ一覧ページ (http://対象サーバ/users)等のブックマーク以外のページはアクセスできないままなので、他のControllerにも、isAuthorized() を実装してみました。
UsersController
ファイルの場所 : /src/Controller/UsersController.php
public function isAuthorized($user) { $action = $this->request->params['action']; // index, add, login, logoutページは誰でも見れる if (in_array($action, ['index', 'add', 'login', 'logout'])) { return true; } // All other actions require an id. if (empty($this->request->params['pass'][0])) { return false; } // リクエストされたページのUser idと // ログイン中のUser idが一致する場合はその他のアクションも許可する $id = $this->request->params['pass'][0]; $current_user = $this->Users->get($id); if ($current_user->id == $user['id']) { return true; } return parent::isAuthorized($user); }
TagsController
ファイルの場所 : /src/Controller/TagsController.php
public function isAuthorized($user) { $action = $this->request->params['action']; // 想定される全てのページへのアクセスを許可する if (in_array($action, ['index', 'add', 'edit', 'view', 'delete'])) { return true; } return parent::isAuthorized($user); }
これで、ユーザ、タグページの各種操作は問題なく行えます。
ちなみにisAuthorized() の処理は、
/vendor/cakephp/cakephp/src/Auth/ControllerAuthorize.php
の authorize() から呼ばれているようですので、興味があれば見てみてください。
VMWare内からVirtual BoxでCentOSを立ち上げようとすると失敗してしまう
状況
VMWare上のCentOS(6.6)環境で、さらにVirtualBox、Vagrantを使用してCentOSを立ち上げた際に以下のエラーが発生しました。
VT-x/AMD-V hardware acceleration is not available on your system.
Your 64-bit guest will fail to detect a 64-bit CPU and will not be able to boot.
解決方法
「VT-x/AMD-V hardware acceleration is not available」の部分が胆でした。
- VMWare上のCentOSを一度シャットダウン
- ホストOSのVMWareプレイヤー上から対象のCentOSを選択し「仮想マシン設定の編集」を選択
- 「仮想マシンの設定」画面が出たら「ハードウェア」タブを選択
- 表示された画面の左側から「プロセッサ」を選択し、右画面の「Intel VT-x/EPTまたは AMD-V/RVIを仮想化」をチェックする
- 設定変更後、再度VMWareのCentOSを起動し、さらにVirtualBox、Virgrantを使用してCentOSを立ち上げる。
これで、「VT-x/AMD-V hardware acceleration is not available on your system ...」が出なくなります。
参考までに。
2014年に読んだ本まとめ
1. テスト駆動開発入門
- 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2003/09
- メディア: 単行本
- 購入: 45人 クリック: 1,058回
- この商品を含むブログ (161件) を見る
2. リーン・スタートアップ
- 作者: エリック・リース,伊藤穣一(MITメディアラボ所長),井口耕二
- 出版社/メーカー: 日経BP社
- 発売日: 2012/04/12
- メディア: 単行本
- 購入: 24人 クリック: 360回
- この商品を含むブログ (92件) を見る
3. リーン開発の現場
- 作者: Henrik Kniberg,角谷信太郎,市谷聡啓,藤原大
- 出版社/メーカー: オーム社
- 発売日: 2013/10/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る
4. Railsレシピブック
- 作者: 高橋征義,松田明,諸橋恭介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2011/07/25
- メディア: 単行本
- 購入: 34人 クリック: 966回
- この商品を含むブログ (38件) を見る
RailsレシピブックとMVCについて少し - saj_kzの日記
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (125件) を見る
「メタプログラミングRuby」感想 - saj_kzの日記
6. 強いチームはオフィスを捨てる
強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」
- 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤー・ハンソン,高橋璃子
- 出版社/メーカー: 早川書房
- 発売日: 2014/01/24
- メディア: 単行本
- この商品を含むブログ (5件) を見る
7. Git逆引き入門
- 作者: 松下雅和,船ヶ山慶,平木聡,土橋林太郎,三上丈晴
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2014/04/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
Git使用時に「こうゆう時どうしよう」という場面がある度に助けられています。
8. これからの「標準」を身につける HTML+CSSデザインレシピ
これからの「標準」を身につける HTML+CSSデザインレシピ[固定レイアウト版]
- 作者: エ・ビスコム・テック・ラボ
- 出版社/メーカー: マイナビ
- 発売日: 2014/03/20
- メディア: Kindle版
- この商品を含むブログを見る
ただ、Kindleの白黒画面では色調整等している部分はまったくわからないので、デザインレイアウトの勉強は書籍でやるべきだなと思いました。。。
- 作者: Bill Karwin,和田卓人(監訳),和田省二(監訳),児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (40件) を見る
ウェブ系エンジニアへの転職を目指していた際に、「そもそもデータベース設計とはなんぞや?」といった状態だったので、さすがにまずいなと思い読んだ一冊。
データ管理の設計は恐ろしくも楽しいと思った一冊でした。
10. パーフェクトPHP
- 作者: 小川雄大,柄沢聡太郎,橋口誠
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/12
- メディア: 大型本
- 購入: 32人 クリック: 1,065回
- この商品を含むブログ (60件) を見る
PHPの文法の基本からセキュリティ対策まできっちりまとめてくれています。仕事ではフレームワークを使用する予定ですが、こちらも読んでおいてよかった。
11. 入門Chef Solo - Infrastructure as Code
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (19件) を見る
世の中のエンジニアの開発効率はみるみる改善されていくんだなと感じました。Chefすごい!vagrant, chef-solo等、実際に環境をいじりながら読むのがおすすめです。
12. 大手を蹴った若者が集まる知る人ぞ知る会社
- 作者: オバタカズユキ(著者),伊藤豊(協力)
- 出版社/メーカー: 朝日新聞出版
- 発売日: 2014/02/20
- メディア: 単行本
- この商品を含むブログを見る
ベンチャー企業で自身のキャリアをスタートさせる若い人達の考え、価値観を感じれる一冊。
13. How Google Works
How Google Works (ハウ・グーグル・ワークス) ―私たちの働き方とマネジメント
- 作者: エリック・シュミット,ジョナサン・ローゼンバーグ,アラン・イーグル,ラリー・ペイジ,土方奈美
- 出版社/メーカー: 日本経済新聞出版社
- 発売日: 2014/10/09
- メディア: 単行本
- この商品を含むブログ (7件) を見る
Googleの重役達が如何に優秀な人材の採用を重視しているか、そしてそれによってGoogle自身の質を保っているんだなぁと感じた一冊でした。
14. 就活「後ろ倒し」の衝撃―「リクナビ」登場以来、最大の変化が始まった
就活「後ろ倒し」の衝撃: 「リクナビ」登場以来、最大の変化が始まった
- 作者: 曽和利光
- 出版社/メーカー: 東洋経済新報社
- 発売日: 2014/09/12
- メディア: 単行本
- この商品を含むブログを見る
今後始まる就活後ろ倒しによって大手企業、中小企業、就活生にそれぞれ生じる影響(というかデメリット)と著者の考える対策をまとめた本。
自分はとうの昔に就活を終えてはいますが、この本読んで、業界全体の影響を考えると、学生さんのために何かしてあげたいなぁと思ってしまいます。「みんながんばれ」
octokit.rbを使って、githubの情報を見てみた
■使用例) ユーザのリポジトリの情報を取得、出力する
github_scouter/github_scouter.rb at master · eiel/github_scouter · GitHub
を参考にして書いてみました。
事前準備
対象環境にoctokitをインストールします。
gem install octokit
コード
require 'octokit' # github user name @name = "kazuhirosaji" options = { auto_paginate: true, access_token: nil, # 必要に応じて入力する } # Clientオブジェクトを生成 @client = Octokit::Client.new(options) # Repositories情報を取得 repos = @client.repositories(@name) # リポジトリ情報の出力 repos.each do |repo| puts "name: #{repo.name}, language: #{repo.language}" puts "url: #{repo.url}" # puts "repository info = #{repo.attrs}" puts "" end
これで、kazuhirosajiアカウントが持っているリポジトリの名前、使用言語と、URLの一覧が表示されます。
■repositories()で取得したデータについて
上記コードの
repos = @client.repositories(@name)
にて、reposにはリポジトリの情報配列が入ります。
Octokitのドキュメントによるとrepositories()は
- (Array<Sawyer::Resource>) repositories(user = nil, options = {}) (also: #list_repositories, #list_repos, #repos) List user repositories.
となっており、配列の中身は "Sawyer::Resource" クラスのオブジェクトが入っています。この"Sawyer::Resource"はユーザ情報等を取得した際にも使用されているようです。
取得したreposにはどんなデータが入っているか?
ここからが今回悩んだポイント。url(リポジトリのURL)やlanguage(リポジトリの言語情報)の他には何が入っているのでしょうか?Octokitのドキュメントを見ただけではわからず、、ちょっと調べてみたのでまとめます。
結論
先に結論から。GitHub API v3に対象データの情報もまとめられていました。
Repositoriesの情報はこちらからurl, language情報の他にfork数等も取得できることがわかります。ちなみに、Usersの情報だったらこちらから。
Github APIページを見つけるまでの話
以下はGithub APIのページに情報があることに気づくまでの四苦八苦の話。
先に書いた通り、配列の中身は"Sawyer::Resource"オブジェクトとなっているようなのでSawyer::Rsourceのソースを覗いてみました。
。。。よくわかりませんでしたが、Class Resourceの中に、
attr_reader :attrs
と記載があったので、こちらが属性一覧に違いない!使ってみたところ、url、languageを含めたデータの中身の一覧を見れました。先の例のコードのrepos.each の箇所を変更することで、repoの属性一覧を閲覧できます。
repos.each do |repo| puts "name: #{repo.name}, language: #{repo.language}" puts "url: #{repo.url}" puts "repository info = #{repo.attrs}" # 有効にする! puts "" end
実行結果(一部抜粋)
. . url: https://api.github.com/repos/kazuhirosaji/testapp repository info = {:id=>12173584, :name=>"testapp", :full_name=>"kazuhirosaji/testapp", :owner=>{:login=>"kazuhirosaji"....
さらにOctokit内で、Sawyerを生成している箇所を調べたところ、どうやらjson形式で受けとったデータをSawyerオブジェクトに格納しているようであることがわかり、ようやく、Github APIに欲しい情報があることに気づけました。
情報の見方はわかったので、次はoctokit使って何かおもしろいもの作りたいなと思います。
個人の活動が記録できる"My Study log"を作った
何で作ったの?
かれこれ1年以上、帰宅後週5回は勉強するぞ! と勉強を続けており、その達成度を確認するために自宅のカレンダーに記録を付けています。
自宅のカレンダー、「P」はプログラミング、「E」は英語です。
どうせな勉強も兼ねてRailsでカレンダー記録帳を作ろうと考え、作成してみました。
イメージ図
こんな感じで個人活動内容を記録できます。
使い方
1. http://shrouded-plains-8033.herokuapp.com/ へ移動
2. 「Sign Up now!」ボタンをクリックして、アカウントを作成
3. ユーザページに遷移したら「Add new subject」の下のテキストボックスに活動内容(例: 英語)を入力して、「create」ボタンをクリックする
4. 右側にカレンダーが表示されること、左側の「select subject」の欄に作成した活動内容が表示されていることを確認
5. 活動を行った日をクリックして、カレンダーに活動内容を付ける
6. 左側の「Save Event」ボタンをクリックして活動内容を記録する
7. 次回以降は、ログインした際にSaveした内容が反映されたカレンダーが表示されます。
開発内容について
開発期間
おおよそ3か月かかりました。Railsチュートリアルをやった後に作成を始めたのが5月の中旬で、6月中ぐらいには形になるかなと思ってたのですが、開発中に発生した問題対処等行っていたら、8月までかかってしまいました。。
もう少し詳しく
Railsチュートリアルで紹介されていたアプリを勉強したから作ったので、ログイン機能などはチュートリアルの内容を使わせてもらっています。
カレンダー表示部分は、以前紹介した、fullcalendar-railsを使用しています。
「強いチームはオフィスを捨てる」感想
強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」
- 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤー・ハンソン,高橋璃子
- 出版社/メーカー: 早川書房
- 発売日: 2014/01/24
- メディア: 単行本
- この商品を含むブログ (4件) を見る
読みました。
原題の"Remote: Office Not Required"の通り、著者の企業で進めているリモートワークのメリットと、如何にしてリモートワークを取り込んでいくかのコツがまとめられていました。 僕は「毎日の通勤が省かれるなんてなんて素晴らしいんだ!」と思いつつも、プロジェクトを進めるうえでは、顔を合わせて簡単に話せる状況が良いプロジェクトには必要考えているので、リモートワークには消極的です。
しかし、彼らはリモートワークでの効率を最大限にするために、方法の検討、ツールの導入、無駄の排除等を積極的に進めており、 「顔を突き合わせている開発現場」でも同じようなTipsを導入していけば、 無駄な会議、情報伝達のロス、ボトルネックなどは改善していけるのではと思いました。
本書で紹介されていた「無駄な待ち時間をなくすためにボトルネックをなくす」、「承認等のしくみをやめて、自分の判断で行動できるようにする」、 「みんないつでも必要な情報にアクセスできるようにする」等は普段の仕事でも意識していきたいです。
以下、本文より引用
重要な変化はいつだって苦労の多いものだ。みんなが一丸となって本気でとりくめば、いまの文化を変えることはできる。大切なのは、その信頼を信じることだ。
プロジェクトマネジメントをする上での「改善し続けること」の大変さ、重要さ、楽しさを考えさせられました。読みやすいのでちょいと時間のある方はお勧めです。
「メタプログラミングRuby」感想
読みました。
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (124件) を見る
等々、どれもすごい威力でした。まさに魔術!
その分使い方を誤ると、メンテナンス不可能コードにも発展しがち。 その点は本書でも紹介されていた、Matz氏の言葉にもある通り「Rubyは"使う人を信じる"」がポリシーだからこそできる柔軟性なんだろうなと思いました。Rubyっておもしろいなーとつくづく感じながら読めました。
でも後半の特異クラスあたりは挫折してしまったので、またどこかで読み直したいなと。。
本書の流れについて、2人の登場人物が章ごとにその日の課題を受け取り、解き方の検討(考え方の解説)、問題を共に考え、最後に回答(解説)を読ませる流れになっているから、「~な問題」、「~なコード」にぶち当たった時はこんな解き方がある!と頭に入りやすく、苦手な大型本だったのですがとっても読みやすかったです。
固い?安全な?コードが書きたい人も、オープンソースやライブラリで他人が書いた魔術を読めるようになるためには本書はお勧め。