5分しかないので、すぐに始めましょう。
ユーザーとグループでデータベーステーブルを作成または変更して、次のようにします。
users
id - primary
username - unique
password
group_id
groups
id - primary
name - unique
次に、いくつかのグループとユーザーを作成します。 管理者グループを作成することを忘れないでください
次に、ユーザーおよびグループモデルクラスを作成します
<?php
class User extends AppModel {
var $name = 'User' ;
var $displayField = 'username' ;
var $belongsTo = array (
'Group' => array (
'className' => 'Group' ,
'foreignKey' => 'group_id'
)
) ;
}
?>
<?php
class Group extends AppModel {
var $name = 'Group' ;
var $displayField = 'name' ;
var $hasMany = array (
'User' => array (
'className' => 'User' ,
'foreignKey' => 'group_id' ,
'dependent' => false
)
) ;
}
?>
そして、次のコードをapp_controller.phpに追加します。
<?php
class AppController extends Controller {
var $components = array ( 'Auth' ) ;
var $permissions = array ( ) ;
function beforeFilter ( ) {
$this -> Auth -> fields = array (
'username' => 'username' , //
'password' => 'password' //
) ;
$this -> Auth -> authorize = 'controller' ;
$this -> Auth -> autoRedirect = false ;
$this -> Auth -> loginAction = array ( 'controller' => 'users' , 'action' => 'login' ) ;
$this -> Auth -> logoutRedirect = array ( 'controller' => 'users' , 'action' => 'login' ) ;
$this -> Auth -> loginRedirect = array ( 'controller' => 'users' , 'action' => 'welcome' ) ;
}
function isAuthorized ( ) {
if ( $this -> Auth -> user ( 'group' ) == '' ) return true ; // "" ,
if ( ! empty ( $this -> permissions [ $this -> action ] ) ) {
if ( $this -> permissions [ $this -> action ] == '*' ) return true ;
if ( in_array ( $this -> Auth -> user ( 'group' ) , $this -> permissions [ $this -> action ] ) ) return true ;
}
return false ;
}
}
?>
users_controller.phpに次の行を追加します 。
<?php
class UsersController extends AppController {
var $name = 'Users' ;
var $helpers = array ( 'Html' , 'Form' ) ;
var $permissions = array (
'logout' => '*' ,
'welcome' => '*'
) ;
function welcome ( ) {
}
function login ( ) {
if ( $this -> Auth -> user ( ) ) {
$this -> Session -> write ( 'Auth.User.group' , $this -> User -> Group -> field ( 'name' , array ( 'id' => $this -> Auth -> user ( 'group_id' ) ) ) ) ;
$this -> redirect ( $this -> Auth -> redirect ( ) ) ;
}
}
function logout ( ) {
$this -> redirect ( $this -> Auth -> logout ( ) ) ;
}
// , add, edit, delete
?>
まあ、それがすべてです。 ここでアクセス権を指定するには、users_controllerで行ったように、コントローラーに$権限を追加する必要があります
仕組み:
ユーザーがログインすると、グループの名前を認証セッションに追加します。 その後、コントローラーメソッドにアクセスすると、AuthコンポーネントがisAuthorized関数を呼び出し、trueが返された場合、ユーザーはアクセスを取得し、falseが返された場合、それを禁止します。 ユーザーが管理者グループに属している場合、常にアクセスできます。 isAuthorized関数は、現在のアクションの名前をキーとして使用して各コントローラーで指定された$ permissions配列を確認し、ユーザーグループがこのキーによって配列内にある場合(まあ、または配列の代わりに '*'-つまり全員)、ユーザーはアクセスを許可されます
注:アクセスレベルが「*」であっても、まだログインしていることがわかります。 Auth-> allowメソッドを使用して、許可されていないユーザーのログインを許可できます。
注:デフォルトではAuthがアクセスを許可するため、ユーザー/ログインへのアクセスを定義しませんでした。
例:
Moderatorsグループにユーザーの削除を許可するとします。 次のコードをusers_controller.phpに追加します。
var $permissions = array (
'logout' => '*' ,
'welcome' => '*'
'delete' => array ( '' )
) ;
ただし、承認されていないユーザーは登録できません。 users_controller.phpに追加します 。
function beforeFilter ( ) {
$this -> Auth -> allow ( 'signup' ) ;
parent :: beforeFilter ( ) ;
}
このソリューションがお役に立てば幸いです。 これは、権利をグループに分割するための非常に簡単なソリューションです。もちろん、欠点もあります。 たとえば、ユーザーが作成した記事のみを変更することはできません。 まあ、少なくともコードを変更せずに。 しかし、私はあなたにお任せします。