我的laravel4应用程序中有一个Personcontroller和一个Festivalcontroller。这些控制器中的操作只能由管理员访问。
如果我的数据库只有一个用户使用test@hotmail.com,那么该用户可以访问这两个控制器的路由。如果我的数据库没有用户test@hotmail.com,但它有其他用户,那么其他用户无法访问这两个控制器的路由。当我的数据库有一个用户test@hotmail.com,并且有其他用户时,每个人都可以访问这两个控制器的路由。
我只希望用户使用电子邮件test@hotmail.com访问这些控制器的路由。
我通过这样做安装了Sentry2:
在composer.json文件中需要:
"cartalyst/sentry": "2.0.*"
运行
php composer.phar update
在应用中> config> app.php:
'Cartalyst\Sentry\SentryServiceProvider',
=>到提供者数组
'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',
=>到别名数组
安装完成后,我制作了SentrySeeder文件:
<?php
class SentrySeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
DB::table('groups')->delete();
DB::table('users_groups')->delete();
Sentry::getUserProvider()->create(array(
'email' => 'test@hotmail.com',
'password' => "test",
'activated' => 1,
));
$user = Sentry::getUserProvider()->findByLogin('test@hotmail.com');
$adminGroup = Sentry::getGroupProvider()->findByName('Test');
$user->addGroup($adminGroup);
}
}
在我的PersonController中
class PersonController extends BaseController {
public function index()
{
try
{
$user = Sentry::findUserByLogin('test@hotmail.com');
if ($user)
{
$person = Person::with('user')->orderBy('person_id')->paginate(10);
return View::make('persons.index')
->with('person', $person);
}
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
echo 'User was not found.';
}
}
}
LoginController中的登录操作
public function login()
{
$input = Input::all();
$rules = array(
'user_email' => 'required',
'user_password' => 'required'
);
$validator = Validator::make($input, $rules);
if ($validator->fails()) {
return Redirect::to('login')
->withErrors($validator) // send back all errors to the login form
->withInput(Input::except('user_password'));
}
else {
$attempt = Auth::attempt([
'user_email' => $input['user_email'],
'password' => $input['user_password']
]);
if ($attempt) {
return Redirect::to('/home');
}
else {
return Redirect::to('login');
}
}
将用户存储在数据库中
public function store()
{
$input = Input::all();
$rules = array(
'user_email' => 'required|unique:users|email',
'user_username' => 'required|unique:users',
);
$validator = Validator::make($input, $rules);
if($validator->passes())
{
$password = $input['user_password'];
$password = Hash::make($password);
$location = new Location();
$person = new Person();
$user = new User();
$person->person_firstname = $input['person_firstname'];
$person->person_surname = $input['person_surname'];
$user->user_username = $input['user_username'];
$user->user_email = $input['user_email'];
$user->user_password = $password;
$location->save();
$person->save();
$user->location()->associate($location);
$user->person()->associate($person);
$user->save();
Session::flash('message', 'Successfully created user!');
return Redirect::to('login');
}
else {
return Redirect::to('persons/create')->withInput()->withErrors($validator);
}
}
答案 0 :(得分:4)
看起来您需要使用自己的用户表并使用Sentry。因此,您需要将相关的Sentry列添加到您的列中。这很简单:
1)转到vendor\cartalyst\sentry\src\migrations
。
2)为您在那里看到的每个文件创建一个新的迁移,例如:
php artisan migrate:make add_sentry_groups_table
3)将up()
和down()
代码(仅限!)复制到新的迁移中。
4)而且,对于用户迁移,您将不得不做一些更改:
而不是Schema::create('users' ...
,而是Schema::table('users' ...
,而是在表格中添加更多列。
删除当前用户表中已读取的列的所有命令,必须删除的行示例:
$table->increments('id');
$table->timestamps();
5)运行正常的'php artisan migrate'。
之后,您应该准备好Sentry的表格。
修改强>
由于您没有使用通常的“电子邮件”和“密码”列,请发布Sentry的配置:
php artisan config:publish cartalyst/sentry
并改变
'login_attribute' => 'user_email',