イメージ画像

Go言語Webアプリ開発日記(1日目)

GoフレームワークのGin

今まで、PHPフレームワークのLaravelで社内サイトを作成してきましたが、コンパイル言語のGoで作り直すために、今勉強中です。

いくつかGo言語のフレームワークを調べてきましたが、Ginが私には、しっくり来そうなので、Ginフレームワークで学習していきたいと思います。フルススタックフレームワークのRevelや軽量高速を謳っているEchoとかも調べてみましたが、とりあえず、Ginについて調べたことを少しずつ書き込んでいきたいと思います。

もしまちがいがあれば、ご指摘いただければ幸いです。

参考サイト

開発環境

  • さくらのVPS
  • CentOS7.1 + Nginx
  • Goバージョン go1.10
  • InteliJIDEA

Nginxの設定

  • ターミナルで vi /etc/nginx/conf.d/gin.conf で下記を作成
  • 下記のようにNginxを設定することで、http://gin.sakura-server.jp(仮)にアクセスするとGinのプログラムが起動する。
server {
      listen 80;
      server_name gin.sakura-server.jp;
      location ~ / {
        proxy_pass http://127.0.0.1:8080;
        }
    }

InteliJIDEAの設定

  • InteliJIdeaでツール→デプロイ→構成をクリック
  • +(追加)をクリック
  • サーバーの追加ダイアログが表示されたらサーバー名(任意)を入力して、SFTPを選択後にOKをクリック
  • SFTPホスト:133.***.***.199
  • ポート:22
  • ルートパス:/home/***/go/src/gin
  • ユーザー名:***
  • 認証タイプ:Key pair ( OpenSSH or PuTTY)
  • プライベート・キーファイル:/Users/***/.ssh/sakura/id_rsa
  • Webサーバー・ルートURL:http://gin.sakura-server.jp
  • マッピングタブのサーバーのデプロイ・パスに / を記入してOKをクリック
  • ツール→デプロイ→次へアップロードgin.sakura-serverjpを選択
  • データがアップされたらターミナルからSakuraに接続

フォルダ構成

  • MVCパターンで作成していきたいと思いますので、まずルートフォルダにcontrollers、models、viewsフォルダを作成します。
  • そしてMainパッケージとしてserver.goファイルを作成します。

Mainパッケージの作成

  • ルートフォルダ上にserver.go名でファイルを作成し、下記のように記述
  • gin/server.go
package main

import (
    "github.com/gin-gonic/gin"
    c "gin/controllers"
)

func main() {
        r := gin.Default()
        r.LoadHTMLGlob("views/*")
        r.GET("/", c.GetUser)
        r.Run(":8080") 
}

基礎的なことですが、Go言語はmainパッケージのmain()関数から実行されます。必要なのは、ファイル名ではなくパッケージ名ですので、ファイル名はmain.goでもserver.goでも全く同じです。

  • 1行目でパッケージ名を入力します。
  • 4行目でgithubからginパッケージをインポートしています。
  • 5行目は、現在作成中のアプリケーションのcontrollersパッケージを変数cの名前でインポートしています。
  • これで、c.GetUserのようにcontrollersフォルダ内の関数を呼び出すことができます。
  • 上記でcontrollersフォルダと記入しましたが、実際には、controllersパッケージのことです。
  • 9行目のgin.Default()とgin.New()の違いは、組み込まれているmiddleweareの違いのはずです。基本的にgin.Defautl()を記入しておけば間違いがないはずです。
  • 10行目のr.LoadHTMLGlob()でビューフォルダの指定をしています。
  • 10行目のr.GET()の第1引数で、URI、第2引数で処理を指定します。第2引数のc.GetUserはcontrollersパッケージのGetUser関数を呼び出しています。
  • r.Run(“:8080”)でサーバーを起動して、8080番ポートを待ち受けます。

コントローラの作成

  • ルートディレクトリにcontrollersフォルダを作成し、下記のようなファイルを作成
  • gin/controllers/user.go
  • controllersパッケージの中にいくつファイルがあっても一つのパッケージとして認識しているはずですので、中の関数名は重複しないように作成する必要があります。
package controllers

import (
	"github.com/gin-gonic/gin"
	"net/http"
	m "gin/models"
)
func GetUsers(c *gin.Context){
   u := m.User{}
   users := u.GetUsers()
   c.HTML(http.StatusOK, "user.html", users)
}
  • 1行目にパッケージ名(controllers)を指定しています。
  • 6行目の”gin/models”は現在作成中のパッケージを変数mの名前で呼び出します。
  • GetUser()関数のGが大文字なのには意味があります。Go言語では、関数の最初の文字が大文字なら、他のパッケージから呼び出すことができますが、これがgetUser()なら同じパッケージ内からしか呼び出すことができません。
  • ですので、server.goのmainパッケージから呼び出されたこの関数が実行されるのです。
  • 9行目のu:=m.User{}は、modelsパッケージ内のUser構造体を初期化し、変数uに代入しています。
  • そして次にmodels内のUser構造体のGetUsers()メソッドを変数usersに代入しています。
  • 最後のc.HTML()メソッドの第1引数は、ステータスコードですので、数値の200を記入しても同じことです。第2引数はビューファイル名、第3引数は、そのビューに渡すデータを指定します。
  • 尚、PHPでは、ステータスコードとかをいちいち考える必要がなかったのですが、Go言語では、結構頻繁にステータスコードが出てきますので、再度ステータスコードを勉強する機会になりました。

モデルの作成

  • modelsフォルダ内にuser.goファイルを作成し、下記のように記述します。なお、controllerとmodelに同じ名前があるのに抵抗がある人は、別ファイル名で作成してもいいと思います。InteliJIDEAでは、同じファイル名を2つ開けるとフォルダ名/ファイル名としてタブに表示されるので、同じ名前でも間違えることがないと思い、同じ名前にしました。
  • gin/models/user.go
package models

import "time"

type User struct {
	ID 		int
	Name 		string          `gorm:"not null"`
	Email   	string		`gorm:"not null;unique"`
	CreatedAt	time.Time
	UpdatedAt	time.Time
	DeletedAt	*time.Time
}
func (u User) GetUsers() *[]User {
   db := GormDB()
   users := &[]User{}
   db.Find(users)
   return users
}
  • 5行目でUser構造体を作成しています。これはデータベースのusersテーブルとリンクさせます。
  • ORMはGormを使用しています。データベースを呼び出す関数は同じ、modelsパッケージ内にgorm.go名で作成します。
  • 9ー10行目のCreatedAtとUpdatedAtはGormが自動的に作成時と修正時を入力してくれます。
  • 11行目のDeletedAtはソフトデリートを実現してくれます。ソフトデリートとは、deleteコマンドで実際にデータを削除するのではなく、削除されたように見せかける仕掛けです。データを誤って削除しないための工夫です。
  • 13行目の(u User)はレシーバーと呼ばれ、User構造体を変数uとを紐づけます。
  • *[]Userは、User構造体のスライスを返します。
  • 14行目のGormDB()は、データベースを呼び出すための関数です。別ファイルgorm.goで作成します。
  • 15行目は、変数usersにUser構造体のスライスを代入しています。
  • db.Find()メソッドは、usersテーブルの全データを取得します。

Gormの設定

  • 上記と同じmodels内にgorm.goを作成し、データベースとの接続用の関数を作成します。
  • gin/models/gorm.go
package models

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)
func GormDB() *gorm.DB {
	DBMS     := "mysql"
	USER     := "root"
	PASS     := "My_password"
	PROTOCOL := "tcp(127.0.0.1:3306)"
	DBNAME   := "GODB"
	TIME 	 := "?parseTime=true"

	CONNECT := USER+":"+PASS+"@"+PROTOCOL+"/"+DBNAME + TIME
	db,err := gorm.Open(DBMS, CONNECT)

	if err != nil {
		panic(err.Error())
	}
	db.LogMode(true)
	db.AutoMigrate(&User{})
	return db
}
  • 4行目:データベースはMySQLを使用しますので、MySQLドライバーをインポートします。
  • 5行目でGormパッケージをインポートしています。
  • 7行目のGormDB()関数は、データベースに接続して、gormパッケージのDBメソッドを返します。
  • 16行目のgorm.Open()メソッドは、第1引数に接続するデータベース名、第2引数に接続情報をセットします。

ビューの作成

  • 最後にViewを作成すれば、基本的なアプリは完成します。
  • Viewは、毎回使う同じタグは、それぞれ、header.html、footer.html、navbar.html等の名称で、作成してviewsフォルダ内に置いておきます。
  • views/header.html
{{define "header"}}
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Gin入門</title>
<!-- ここにBootStrap等のリンクやScriptを記述 -->
</header>
<body>
{{end}}
  • views/footer
{{define "footer"}}
<script>
    //ここにBootstrap等のScriptを記述する
</script>
</body>
</html>
{{end}}
  • views/navbar.html
{{define "navbar"}}
<nav class="navbar navbar-fixed-top navbar-default" role="navigation">
<!-- ここに中身を記述します(省略)-->
</nav>
{{end}}
  • ビューのファイル名は、どんなファイル名を使っても全く関係ありません。{{define “header”}}から{{end}}までの間の文字列をテンプレートとして認識します。
  • ですので、実際にビューを使用するには、呼び出すビューファイル名の中に上記のテンプレートを組み込みます。
  • 実際に呼び出すテンプレートindex.htmlを下記のように記述します。
{{template "header"}}
{{template "navbar"}}
    <table class="table table-borderless table-striped">
        <tr class="table-primary">
            <th>氏名</th>
            <th>Eメール</th>
            <th>作成日</th>
        </tr>
    {{range .}}
        <tr>
            <td>{{.Name}}</td>
            <td>{{.Email}}</td>
            <td>{{.CreatedAt}}</td>
        </tr>
    {{end}}
    </table>
{{template "footer"}}
  • それぞれの{{template “header”}}、{{template “navbar”}}、{{template “footer”}}の箇所で上記で作成した、header.html、navbar.htm、footer.htmlの中身のタグ部分が適用されます。
  • {{range .}}から{{end}}までの間がデータベースの回数分繰り返し処理されます。PHPのforeach文と同じです。
  • Go言語の面白いところは、.  (ドット)だけで全てのデータを表示するところです。つまりこの .  (ドット)は、models/user.goのGetUsersメソッドから送られたusersデータです。
  • 実際にそのデータの中身に直接アクセスするには  .Nameのように .  (ドット)のあとに、フィールド名を記述します。

これで、ターミナルから、go run server.goと入力すると下記のようなWebアプリが完成します。

たった1日でこれだけのアプリが作れるのですから、Go言語(Gin)恐るべし。

今回のアプリを少しずつ修正しながら、Go言語の勉強をしてみようと思います。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2018年5月26日 | コメント/トラックバック(0) |

カテゴリー:Go言語

さくらのVPSでサーバー構築(4)

VPSサーバーはレンタルサーバーと違って、セキュリティは自分で設定しなくてはいけません。サーバー攻撃を避けるためにも、セキュリティは確実に設定しましょう。

Sudoの設定

まず、rootユーザーでアクセスしないように、一般ユーザー(例:hide)を作成し、Sudoを設定します。

useradd hide
passwd hide
visudo
sudo vi /etc/ssh/sshd_config
sudo systemctl restart sshd
  1. 「useradd ユーザー名」で新規ユーザーを作成します。
  2. 「passwd ユーザー名」の後に、新規ユーザーのパスワードを2回入力します。
  3. 「visudo」コマンドで、Sudo設定ファイルを開き、最終行に「hide  ALL=(ALL) ALL」を追加します。
  4. 次に、rootユーザーのログインを禁止します。
  5. sudo vi /etc/ssh/sshd_config で設定ファイルを開き、『#PermitRootLogin yes』を『PermitRootLogin no』に変更します。
  6. sshサービスを再起動します。『sudo systemctl restart sshd』

これで、一般ユーザーにroot権限を委譲しました。root権限が必要なコマンドに関しては、先頭にsudoを付与して、コマンドを実行することができます。※パスワードを尋ねられた場合は、一般ユーザーのパスワードを入力します。

ファイアウォールの設定

CentOS6まではLinuxサーバ上でファイアウォールを稼働する場合、iptablesを使ったフィルタを実装するのが一般的でしたが、CentOS7では、新たなファイアウォールとしてfirewalldという機能が実装されました。このfirewalldは内部的にiptablesを利用しているのですが、firewalldとiptablesを併用することはできませんので注意が必要です。

このfirewalldは事前にゾーンというものを定義し、そのゾーンに対して許可するサービスを定義していきます。いろいろなゾーンがありますが、デフォルトのpublicゾーンに対して、定義を設定します。

それでは、現在のファイアウォールを確認してみましょう。

systemctl status firewalld

※Active:acitve(running)….となっている場合は、稼働中です。Activeになっていない場合は、下記の要領で稼働中にします。

systemctl start firewalld
systemctl enable firewalld

現在の設定を表示します。

firewall-cmd --list-all

下記のように表示されます。(環境によって異なります。)※デフォルトのpublicゾーンでは、dhcpv6-clientとsshのみがサービスとして許可されています。

public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

それでは、下記のようにして、httpサービスを追加します。

sudo firewall-cmd --add-service=http --permanent

successと表示されたら、OKです。下記のコマンドで稼働中のサービスのみを確認できます。

sudo firewall-cmd --reload
firewall-cmd --list-service

パスワード認証から鍵認証へ変更する

最近はパスワード総当たり攻撃が非常に多くなっています。そこで、より安全にサイトを管理するために、パスワード認証から、鍵認証へ変更しましょう。

一般ユーザーのまま、下記のコマンドを入力して、鍵ペアを作成します。

ssh-keygen -t rsa
  • 保存場所は、/home/ユーザー名/.ssh/id_rsa と入力します。
  • パスフレーズを設定します。(空のままでも設定できます。)

作成できているかどうか確認してみます。

ls .ssh
  • id_rsaとid_rsa.pubの2種類のファイルが作成されていると思います。

公開鍵の名前を変更し、パーミッションも変更します。

mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
  • 作成されたid_rsa.pubをauthorized_keysに変更します。
  • ファイルのパーミッションを、600に変更します。

次に、WinSCPで作成したid_rsaをローカルのPCにダウンロードします。ダウンロードの箇所は、どこでもいいのですが、例として、C:\Users\ユーザー名\.ssh\sakuraに保存します。

WinSCPの設定

  1. WinSCPを起動したら、新しいサイトをクリックし、ホスト名にVPSサーバーのIPアドレス、ユーザー名に一般ユーザー、パスワードに一般ユーザーのパスワードを入力します。
  2. 設定をクリックし、左メニューの認証をクリックします。
  3. 秘密鍵に、先ほどダウンロードしたid_rsaを選択して、OKをクリックします。
  4. すると、『この秘密鍵OpenSSH SSH-2をPutTTYgenでPuTTY形式の秘密鍵に交換しますか?』のダイアログが表示されますので、OKをクリックします。
  5. PuTTYgen:Enter Passphraseとパスフレーズを入力する小さなダイアログが表示されますので、先ほど鍵ペアを作成するときに入力したパスフレーズを入力します。
  6. 『Successfully imported foreign key…』と表示されたら、PuTTYgen形式の秘密鍵が完成しましたので、OKをクリックします。
  7. PuTTY Key Generatorが起動したら、『Save private key』ボタンをクリックし、C:\Users\ユーザー名\.ssh\sakuraに名前を付けて保存します。例:sakura.ppk
  8. 保存したら、PuTTY Key Generatorを終了します。
  9. WinSCPの画面に戻ったら、今保存した秘密鍵を選択して、OKをクリックします。
  10. トップに戻ったら、保存して、ログインボタンをクリックするとサイトにログインすることができます。

Rloginの設定

次にRLoginを設定します。

  1. ファイル→サーバーに接続から、今まで、使用していたサーバーを選択し、編集ボタンをクリックします。
  2. SSH Identity Keyの参照(K)ボタンをクリックします。
  3. C:\Users\ユーザー名\.ssh\sakuraフォルダのid_rsaファイルか、sakura.ppkファイルを選択します。
  4. OKボタンをクリックすると、サーバーに接続することができます。

パスワード認証の禁止

上記の設定が完成したら、パスワード認証を禁止し、鍵認証でのみ認証できるように環境ファイルを変更します。

sudo vi /etc/ssh/sshd_config
  • 77行目のパスワード認証の箇所を探します。
  • #PasswordAuthentication yes
  • 下記のように変更します。
  • PasswordAuthentication no

ファイルを保存したら、sshdを再起動します。

sudo systemctl restart sshd

これで、一応基本的なセキュリティ対策は、OKです。それでは、快適なVPSサーバー生活をお楽しみ下さい。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2016年6月27日 | コメント/トラックバック(0) |

カテゴリー:CentOS さくらのVPS

祝!PHP7.0.0リリース

phpの10年ぶりとなるメジャーバージョンアップ『PHP7.0.0』の正式版が2015年12月3日についにリリースされました。php6.0へのバージョンアップの模索及び断念から、紆余曲折を経ての誕生に、感慨一入です。

そこで、今日はCentOS7にPHP7.0.0をyumコマンドでインストールする方法をご紹介したいと思います。と、いっても以前ご紹介した方法ですが(*^▽^*)

remiリポジトリのインストール

一番簡単に、PHP7.0.0をインストールするには、remi-php70リポジトリを利用します。

まず最初にwgetコマンドで、最新のremiリポジトリをダウンロードします。

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

wgetコマンドがインストールされていない場合は、yumコマンドでインストールしてください。

yum -y install wget

次に、rpm(Red Hat package manager)で、remiリポジトリをインストールします。

rpm -Uvh remi-release-7.rpm
  • -Uオプションは、RPMパッケージをインストール又は、アップグレードします。
  • -Vオプションは、RPMパッケージを検査します。
  • -Hオプションは、RPMパッケージの進行状況を「#」記号で表示します。
  • ※尚、epelがインストールされていない場合は、エラーになりますので、下記のコマンドでepelをインストールしてから、再度上記コマンドを実行してください。
  • yum -y install epel-release

最新のremiリポジトリをインストールしたら、/etc/yum.repos.dディレクトリ内にあるremi-php70.repoという名前のレポジトリを利用してインストールします。

yumコマンドでインストール

yum -y install --enablerepo=remi-php70 php php-mbstring php-pear php-fpm phpMyAdmin php-mcrypt

たったこれだけでphp7.0.0がインストールできました。簡単ですね。

さあ皆さん、php7を堪能してください。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年12月5日 | コメント/トラックバック(0) |

カテゴリー:CentOS

CentOS7にMySQL5.7のインストール

飛躍的に処理能力がアップしたと評判の最新のMySQL5.7.9をCentOS7にインストールする方法を調べてみたいと思います。

  1. 現状のインストールされているMySQLを調べてみます。
    rpm -qa | grep mysql
  2. 現状のMySQLのバージョンを削除します。
    yum remove mysql*
  3. rmpを追加します。
    yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
  4. yum-utilsを先にインストールします。
    yum -y install yum-utils
  5. MySQLをインストールできるように調整します。
    yum-config-manager --disable mysql56-community
    yum-config-manager --enable mysql57-community-dmr
  6. インストールを開始します。※結構時間がかかります。
    yum install -y mysql mysql-devel mysql-server mysql-utilities
  7. MySQLのバージョンを確認してみましょう。5.7.9がインストールされています。
    mysql --version
  8. MySQLを起動します。
    systemctl start mysqld
  9. 初期パスワードを確認します。
    vi /var/log/mysqld.log
  10. 6行目あたりに、A temporary password….と表示されている箇所root@localhost:以下にパスワードが表示されています。
    2015-11-21 17-15-23
  11. 上記のパスワードでMySQLを起動します。
    mysql -u root -p'J;ULqQ+-a6<t'
  12. MySQLが起動したら、早速パスワードを変更します。尚、新規パスワードには、大文字、小文字、数字、記号の全てが入っている必要があります。
    set PASSWORD='Winroad.*1234';
  13. my.confファイルを修正します。
    vi /etc/my.cnf
  14. MySQL5.7からは、デフォルトでパスワードの保存期間が、360日に指定されていますので、パスワードの保存期間を無期限に変更します。my.cnfファイルの最後に下記を追加します。
    default_password_lifetime = 0

これで、MySQL5.7が無事インストールできました。

2015-11-21 20-43-13

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年11月21日 | コメント/トラックバック(0) |

カテゴリー:CentOS さくらのVPS

CentOS7+NginxにLaravel5のインストール

Laravelのインストールは、Apache環境では何度もやっているのですが、今回はCentOS7+Nginx+PHP-FPM環境でLaravelが動くように設定してみたいと思います。

Composerのインストール

LaravelをインストールするにはComposerが必要ですが、まだ導入していない場合は、下記のコマンドでインストールします。

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Laravelのインストール

  1. nginxのWebのデフォルトルートは、/usr/share/nginx/htmlですが、ApacheのWebルートフォルダの方がなじみがあるので、Laravelを下記の箇所(/var/www/laravel)にインストールします。
    cd /var/www
    composer create-project laravel/laravel laravel dev-master --prefer-dist
  2. サブドメイン(laravel.winroad.org)を作成します。サブドメインの作成方法は、こちらをご参照下さい。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

さくらのVPSでサーバー構築(3)

今日は、PHP、MySQL5.7、phpMyAdminをインストールしたいと思います。

PHP及びPHP-FPMのインストール

  1. epelでインストールします。
    yum --enablerepo=epel -y install php php-mbstring php-pear php-fpm
  2. php-FPMを設定します。
    vi /etc/php-fpm.d/www.conf
  3. デフォルトでuserとgoupがapacheに設定されていますので、nginxに変更します。
  4. 39行目のuser=apacheを下記に変更します。
    user = nginx
  5. 41行目のgroup=apacheを下記に変更します。
    group = nginx
  6. php-fpmの起動と自動起動を設定します。
    systemctl start php-fpm
    systemctl enable php-fpm

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年11月15日 | コメント/トラックバック(0) |

カテゴリー:CentOS さくらのVPS

さくらのVPSでサーバー構築(2)

今日は、急激にシェアを伸ばして、Apacheを脅かす存在に成長したWebサーバーのNginxをインストールしたいと思います。

リポジトリの追加

Nginxをインストールする前に、EpelとRPMForgeリポジトリを追加しておきます。

Server World様の『リポジトリを追加する』を参照して、追加してください。

Nginxのインストール

EPELからNginxをインストールします。インストールされたnginxのバージョンは、1.6.3でした。

yum --enablerepo=epel -y install nginx

インストールしたら、Nginxを起動及び自動起動設定をします。

systemctl start nginx
systemctl enable nginx

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

さくらのVPSでサーバー構築(1)

今回、下記の内容で、さくらのVPSサーバーを借りましたので、実際にサーバーを構築する手順等を書き留めていきたいと思います。

  • ゾーン 東京第2ゾーン
  • メモリ 2GB
  • ディスク SSD 50GB
  • CPU 3コア

OSの再インストール

さくらのVPSの標準OSは、CentOS6ですので、まず、最初にCentOS7にアップグレードしたいと思います。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年11月12日 | コメント/トラックバック(0) |

カテゴリー:CentOS さくらのVPS

Laravel5で社内専用サイト(6-4)

さて、前回までで基本的なデータベースは完成しました。尚、UserとRoleの関連づけは本サイトでは、ご紹介していませんが、そんなに難しくないと思いますので、各自で作成してください。※Userの修正ページでロールのリストからRole_idを選択するように作成すればいいと思います。

まず、ACL(アクセスコントロールリスト)ですが、認証のauthも兼ねて作成するのも1つですが、authとは、別で作成する方法を考えてみたいと思います。ですので、アクセス制限するページには、$this->middleware(‘auth’)の後に、$this->middleware(‘acl’)と入力します。

こうすれば、$this->middleware(‘acl’,[‘only’=>[‘getDelete’,’postDelete’]])とすることで、削除用のメソッド以外には、一般的なログインユーザーがアクセスすることができるようになります。

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月20日 | コメント/トラックバック(0) |

カテゴリー:Laravel

Laravel5で社内専用サイト(6-3)

前回は、ロールとパーミッションのデータをいくつか入力してみました。今回は、このロールとパーミッションを関連づけしたいと思います。

ロールとパーミッションの関連づけ

ロールの詳細ページから、パーミッションの許可(allow)の設定を行いたいと思います。getViewを下記のように作成します。

app/Http/ControllersAuth/AclController.php

//ロールの詳細
 public function getView($role_id)
 {
 $role=Role::find($role_id);
 //ユーザーが取得しているパーミッションのリスト
 $lists=$role->permissions->lists('id');
 //全パーミッションから取得済みパーミッションを除外して取得
 $permissions=Permission::whereNotIn('id',$lists)->get();
 return view('acl.view',compact('role','permissions'));
 }

この投稿の続きを読む »

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

2015年8月19日 | コメント/トラックバック(0) |

カテゴリー:Laravel

このページの先頭へ