澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站YII2框架便捷快速的实现用

数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,官网介绍滴很详细了,在此我就不赘述啦,重点我记下多对多的关系

上一篇文章我们介绍快速搭建YII2框架advanced安装配置

使用Spring Security实现方法权限管理

一种常见的关联关系是多对多,即表A的某条记录通过中间表C与表B的多条记录关联,反之亦然。比如一个用户有多种角色,反之一个角色对应多个用户。

本篇文章将会配合YII2框架原有的登录机制模板快速的实现用户后台的登录

1、技术目标

为了测试该关联关系,我们沿用官网的用户角色示例:

1:在数据库建立对应的用户信息表

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `admin`;

CREATE TABLE `admin` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '账户',

`auth_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`password_hash` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`password_reset_token` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,

`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`role` smallint(6) NOT NULL DEFAULT '10',

`mobile` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '手机号码(登录账号)',

`status` smallint(6) NOT NULL DEFAULT '10' COMMENT '状态',

`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`updated_at` datetime NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

INSERT INTO `admin` VALUES ('1', 'yicheng', 'kjfaoigk', '$2y$13$k0312JALBVCy7f2iPfJGXOdYUEYl6x8nSynSLpDNx6ky19gqZmCF2', '', '837269003@qq.com', '10', '15980893193', '10', '2017-09-28 16:08:31', '2017-09-19 16:08:28');

将上述 SQL文件进行执行,首先新建数据库

澳门新浦京娱乐场网站 1

澳门新浦京娱乐场网站 2

将数据库参数改为自己数据库名称

澳门新浦京娱乐场网站 3

输入账户:yicheng  密码:123456 ,会报错 提示User表格不存在

澳门新浦京娱乐场网站 4

如果我们把原来数据建立的admin 表格重命名 为user  刷新页面此时就没有报错了,显示登录成功

澳门新浦京娱乐场网站 5

了解并创建Security框架所需数据表

需要三张数据表:usersroles 和 role_userrole_user 表按照关联模型名的字母顺序命名(这里role_user是中间表),并且包含 user_id 和 role_id两个列。

2:一般情况下User是留给前端普通用户注册使用的,怎样用自己的后台管理员Admin表格呢

将上一步的表格名称重新修改回admin,

在浏览器中访问:yii2.login/index.php?r=gii ,准备生成model

澳门新浦京娱乐场网站 6

填好相关信息,框架会自动生成到文件目录

澳门新浦京娱乐场网站 7

修改配置文件 设置用户登录验证类为上一步生成的admin模型

澳门新浦京娱乐场网站 8

此时再次输入以yii2.login 发现依旧会报错,这又是为什么呢

澳门新浦京娱乐场网站 9

是因为我们没有实现IdentityInterface接口

澳门新浦京娱乐场网站 10

将原来的User 和model做一个比对,将Admin里面没有的函数从User表里面拷贝过来。

澳门新浦京娱乐场网站 11

指定新的LoginForm: 拷贝一份LoginForm 修改它的命名空间,然后将Login 使用的Admin  as为User

澳门新浦京娱乐场网站 12

SiteController 即我们默认的登录器 指定我们配置好的LoginForm

澳门新浦京娱乐场网站 13

为项目添加Spring Security框架

多对多关联通过编写返回 belongsToMany 方法返回结果的方法来定义。废话不说多,直接上数据结构:

掌握Security框架配置

1:创建一个角色表roles,并添加一些初始化数据:

应用Security框架为项目的CRUD操作绑定权限

SET FOREIGN_KEY_CHECKS=0;

2、权限管理需求描述


为系统中的每个操作定义权限,如定义4个权限:

-- Table structure for users

1)超级权限,可以使用所有操作


2)添加影片权限

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_email_unique` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3)修改影片权限


 4)删除影片权限

-- Records of users

为系统设置管理员帐号、密码


为系统创建权限组,每个权限组可以配置多个操作权限,如创建2个权限组:

INSERT INTO `users` VALUES ('1', 'admin', 'admin@163.com', '$2y$10$J/yXqscucanrHAGZp9G6..Tu1Md.SOljX3M8WrHsUdrgat4zeSuhC', 'ilocXtjZJwhrmIdLG1cKOYegeCwQCkuyx1pYAOLuzY2PpScQFT5Ss7lBCi7i', '2016-04-21 16:26:23', '2016-12-14 09:29:59');
INSERT INTO `users` VALUES ('2', 'baidu', '10940370@qq.com', '$2y$10$2A5zJ4pnJ5uCp1DN3NX.5uj/Ap7P6O4nP2BaA55aFra8/rti1K6I2', null, '2016-04-22 06:48:10', '2016-04-22 06:48:10');
INSERT INTO `users` VALUES ('3', 'fantasy', '1009@qq.com', '', null, '2017-06-14 10:38:57', '2017-06-15 10:39:01');

1)"Administrator"权限组,具有超级权限

2:创建一个角色表roles,并添加一些初始化数据:

 2)"影片维护"权限组,具有添加影片、修改影片权限

SET FOREIGN_KEY_CHECKS=0;

可将管理员加入权限组,管理员登录后具备权限组所对应操作权限


管理员可不属于某权限组,可为管理员直接分配权限

-- Table structure for roles

3、使用准备


3.1)在数据库中创建6张表

DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

t_admin        管理员帐号表


t_role权限表

-- Records of roles

t_group        权限组表


t_group_role权限组对应权限表

INSERT INTO `roles` VALUES ('1', '超级版主', '2016-04-21 16:26:23', '2016-12-14 09:29:59');
INSERT INTO `roles` VALUES ('2', '司令', '2016-04-22 06:48:10', '2016-04-22 06:48:10');
INSERT INTO `roles` VALUES ('3', '军长', '2017-06-14 10:38:57', '2017-06-15 10:39:01');
INSERT INTO `roles` VALUES ('4', '司长', '2017-06-07 10:41:41', '2017-06-15 10:41:51');
INSERT INTO `roles` VALUES ('5', '团战', '2017-06-22 10:41:44', '2017-06-28 10:41:54');
INSERT INTO `roles` VALUES ('6', '小兵', '2017-06-22 10:41:47', '2017-06-22 10:41:56');

t_group_user管理员所属权限组表

3:创建一个中间表role_user用于记录users表与roles表的对应关系,并添加一些初始化数据:

t_user_role管理员对应权限表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for role_user
-- ----------------------------
DROP TABLE IF EXISTS `role_user`;
CREATE TABLE `role_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `role_id` int(11) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Records of role_user
-- ----------------------------
INSERT INTO `role_user` VALUES ('1', '1', '2', '2017-06-07 11:42:13', '2017-06-21 11:32:16');
INSERT INTO `role_user` VALUES ('2', '1', '3', '2017-06-07 11:32:13', '2017-06-07 11:22:13');
INSERT INTO `role_user` VALUES ('3', '2', '4', '2017-06-07 11:32:13', '2017-06-07 11:12:13');
INSERT INTO `role_user` VALUES ('4', '1', '5', '2017-06-07 11:32:13', '2017-06-07 11:22:13');
INSERT INTO `role_user` VALUES ('5', '3', '6', '2017-06-07 11:32:13', '2017-06-07 11:52:13');
INSERT INTO `role_user` VALUES ('6', '3', '2', '2017-06-07 11:32:13', '2017-06-07 11:42:13');
INSERT INTO `role_user` VALUES ('7', '2', '2', '2017-06-07 11:42:13', '2017-06-07 11:52:13');

建表SQL语句如下:

注意我们定义中间表的时候没有在结尾加s并且命名规则是按照字母表顺序,将role放在前面,user放在后面,并且用_分隔,这一切都是为了适应Eloquent模型关联的默认设置:在定义多对多关联的时候如果没有指定中间表,Eloquent默认的中间表使用这种规则拼接出来。

Sql代码

创建一个Role模型:

SET FOREIGN_KEY_CHECKS=0; 

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

/**
 * Class Role
 * @package AppModels
 * @mixin Eloquent
 */
class Role extends Model
{


}

-- 创建管理员帐号表t_admin 

然后我们在 User 模型上定义 roles 方法:

CREATE TABLE `t_admin` (  

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

/**
 * Class User
 * @package AppModels
 * @mixin Eloquent
 */
class User extends Model
{
    /**
     * 用户角色
     */
    public function roles()
    {
        return $this->belongsToMany('AppModelsRole');
    }
}

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

注:正如我们上面提到的,如果中间表不是role_user,那么需要将中间表作为第二个参数传入belongsToMany方法,如果中间表中的字段不是user_idrole_id,这里我们姑且将其命名为$user_id$role_id,那么需要将$user_id作为第三个参数传入该方法,$role_id作为第四个参数传入该方法,如果关联方法名不是roles还可以将对应的关联方法名作为第五个参数传入该方法。

`passwd`varchar(12) NOT NULL DEFAULT '' COMMENT '用户密码',  

接下来我们在控制器中编写测试代码:

`nickname`varchar(20) NOT NULL DEFAULT '' COMMENT '用户名字',  

<?php

$user = User::find(1);
$roles = $user->roles;
echo '用户'.$user->name.'所拥有的角色:';
foreach($roles as $role)
    echo $role->name.'  '; //对应输出为:用户admin所拥有的角色:司令  军长  团战  

`phoneno`varchar(32) NOT NULL DEFAULT '' COMMENT '电话号码',  

 当然,和所有其它关联关系类型一样,你可以调用roles 方法来添加条件约束到关联查询上:

PRIMARY KEY (`id`)  

User::find(1)->roles()->orderBy('name')->get();

) ENGINE=InnoDB AUTO_INCREMENT=6DEFAULT CHARSET=utf8; 

正如前面所提到的,为了确定关联关系连接表的表名,Eloquent 以字母顺序连接两个关联模型的名字。不过,你可以重写这种约定 —— 通过传递第二个参数到 belongsToMany 方法:

-- 添加3个管理帐号  

return $this->belongsToMany('AppModelsRole', 'user_roles');

INSERT INTO `t_admin` VALUES ('1', 'admin', 'admin', '');  

除了自定义连接表的表名,你还可以通过传递额外参数到 belongsToMany 方法来自定义该表中字段的列名。第三个参数是你定义关联关系模型的外键名称,第四个参数你要连接到的模型的外键名称:

INSERT INTO `t_admin` VALUES ('4', '123456', 'test', '');  

return $this->belongsToMany('AppModelsRole', 'user_roles', 'user_id', 'role_id');

INSERT INTO `t_admin` VALUES ('5', '111111', '111111', ''); 

定义相对的关联关系

-- 创建权限表t_role 

要定义与多对多关联相对的关联关系,只需在关联模型中调用一下 belongsToMany 方法即可。我们在 Role 模型中定义 users 方法:

CREATE TABLE `t_role` (  

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

/**
 * Class Role
 * @package AppModels
 * @mixin Eloquent
 */
class Role extends Model
{
    /**
     * 角色用户
     */
    public function users()
    {
        return $this->belongsToMany('AppModelsUser');
    }

}

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

 正如你所看到的,定义的关联关系和与其对应的User 中定义的一模一样,只是前者引用 AppModelsRole,后者引用AppModelsUser,由于我们再次使用了 belongsToMany 方法,所有的常用表和键自定义选项在定义与多对多相对的关联关系时都是可用的。

`role`varchar(40) NOT NULL DEFAULT '',  

测试代码如下:

`descpt`varchar(40) NOT NULL DEFAULT '' COMMENT '角色描述',  

$role = Role::find(2);
$users = $role->users;
echo '角色#'.$role->name.'下面的用户:';
foreach ($users as $user) 
  echo $user->name.' ';//对应输出为:角色#司令下面的用户:admin fantasy baidu 

`category`varchar(40) NOT NULL DEFAULT '' COMMENT '分类',  

正如你看到的,处理多对多关联要求一个中间表。Eloquent 提供了一些有用的方法来与这个中间表进行交互,例如,我们假设 User 对象有很多与之关联的 Role 对象,访问这些关联关系之后,我们可以使用这些模型上的pivot 属性访问中间表字段:

PRIMARY KEY (`id`)  

$roles = User::find(1)->roles;
foreach ($roles as $role) 
    echo $role->pivot->role_id.'<br>';//对应输出为:2 3 5

) ENGINE=InnoDB AUTO_INCREMENT=60DEFAULT CHARSET=utf8; 

 注意我们获取到的每一个 Role 模型都被自动赋上了 pivot 属性。该属性包含一个代表中间表的模型,并且可以像其它 Eloquent 模型一样使用。

-- 加入4个操作权限 

默认情况下,只有模型主键才能用在 pivot 对象上,如果你的 pivot 表包含额外的属性,必须在定义关联关系时进行指定:

INSERT INTO `t_role` VALUES ('1', 'ROLE_ADMIN', '系统管理员', '系统管理员');  

return $this->belongsToMany('AppModelsRole')->withPivot('column1', 'column2');

INSERT INTO `t_role` VALUES ('2', 'ROLE_UPDATE_FILM', '修改', '影片管理');  

比如我们修改role_user表增加一个字段 username 数据如下:
澳门新浦京娱乐场网站 14

INSERT INTO `t_role` VALUES ('3', 'ROLE_DELETE_FILM', '删除', '影片管理');  

修改模型User:

INSERT INTO `t_role` VALUES ('4', 'ROLE_ADD_FILM', '添加', '影片管理'); 

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

/**
 * Class User
 * @package AppModels
 * @mixin Eloquent
 */
class User extends Model
{
    /**
     * 用户角色
     */
    public function roles()
    {
        //return $this->belongsToMany('AppModelsRole');
        return $this->belongsToMany('AppModelsRole')->withPivot('username');
    }
}

-- 创建权限组表 

 测试代码如下:

CREATE TABLE `t_group` (  

$user = User::find(1);
foreach ($user->roles as $role) 
  echo $role->pivot->username;//对应输出为:马特马特2马特3

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

如果你想要你的 pivot 表自动包含created_at 和 updated_at 时间戳,在关联关系定义时使用 withTimestamps 方法:

`groupname`varchar(50) NOT NULL DEFAULT '',  

return $this->belongsToMany('AppModelsRole')->withTimestamps();

PRIMARY KEY (`id`)  

 通过中间表字段过滤关联关系

) ENGINE=InnoDB AUTO_INCREMENT=7DEFAULT CHARSET=utf8; 

你还可以在定义关联关系的时候使用 wherePivot 和 wherePivotIn 方法过滤belongsToMany 返回的结果集:

-- 添加2个权限组 

return $this->belongsToMany('AppModelsRole')->withPivot('username')->wherePivot('username', '马特2');

//return $this->belongsToMany('AppModelsRole')->wherePivotIn('role_id', [1, 2]);

INSERT INTO `t_group` VALUES ('1', 'Administrator');  

测试代码如下:

INSERT INTO `t_group` VALUES ('2', '影片维护'); 

$user = User::find(1);
print_r($user->roles->toArray());

-- 创建权限组对应权限表t_group_role 

以上对应输出:

CREATE TABLE `t_group_role` (  

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => 军长
            [created_at] => 2017-06-14 10:38:57
            [updated_at] => 2017-06-15 10:39:01
            [pivot] => Array
                (
                    [user_id] => 1
                    [role_id] => 3
                    [username] => 马特2
                )

        )

)

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

如果你想要你的pivot表自动包含created_atupdated_at时间戳,在关联关系定义时使用withTimestamps方法:

`groupid`bigint(20) unsigned NOT NULL,  

return $this->belongsToMany('AppModelsRole')->withTimestamps();

`roleid`bigint(20) unsigned NOT NULL,  

这一节我先讲到这里啦,下一节我将讨论更复杂的三种关联关系及其在模型中的定义及使用。未完待续...

PRIMARY KEY (`id`),  

UNIQUE KEY `groupid2` (`groupid`,`roleid`),  

KEY `roleid` (`roleid`),  

CONSTRAINT `t_group_role_ibfk_1` FOREIGN KEY (`groupid`) REFERENCES `t_group` (`id`),  

CONSTRAINT `t_group_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `t_role` (`id`)  

) ENGINE=InnoDB AUTO_INCREMENT=83DEFAULT CHARSET=utf8;  

-- 加入权限组与权限的对应关系 

INSERT INTO `t_group_role` VALUES ('1', '1', '1');  

INSERT INTO `t_group_role` VALUES ('2', '2', '2');  

INSERT INTO `t_group_role` VALUES ('4', '2', '4');  

-- 创建管理员所属权限组表t_group_user 

CREATE TABLE `t_group_user` (  

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

`userid`bigint(20) unsigned NOT NULL,  

`groupid`bigint(20) unsigned NOT NULL,  

PRIMARY KEY (`id`),  

KEY `userid` (`userid`),  

KEY `groupid` (`groupid`),  

CONSTRAINT `t_group_user_ibfk_2` FOREIGN KEY (`groupid`) REFERENCES `t_group` (`id`),  

CONSTRAINT `t_group_user_ibfk_3` FOREIGN KEY (`userid`) REFERENCES `t_admin`澳门新浦京娱乐场网站YII2框架便捷快速的实现用户后台登录管理,laravel中的多对多关系详解。 (`id`)  

) ENGINE=InnoDB AUTO_INCREMENT=18DEFAULT CHARSET=utf8; 

-- 将管理员加入权限组 

INSERT INTO `t_group_user` VALUES ('1', '1', '1');  

INSERT INTO `t_group_user` VALUES ('2', '4', '2'); 

-- 创建管理员对应权限表t_user_role  

-- 设置该表可跳过权限组,为管理员直接分配权限 

CREATE TABLE `t_user_role` (  

`id`bigint(20) unsigned NOT NULL AUTO_INCREMENT,  

`userid`bigint(20) unsigned NOT NULL,  

`roleid`bigint(20) unsigned NOT NULL,  

PRIMARY KEY (`id`),  

KEY `userid` (`userid`),  

KEY `roleid` (`roleid`),  

CONSTRAINT `t_user_role_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `t_admin` (`id`),  

CONSTRAINT `t_user_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `t_role` (`id`)  

) ENGINE=InnoDB AUTO_INCREMENT=5DEFAULT CHARSET=utf8; 

3.2)在项目中新增如下jar包(security框架所需jar包):

spring-security-config-3.1.0.RC2.jar

spring-security-core-3.1.0.RC2.jar

spring-security-taglibs-3.1.0.RC2.jar

spring-security-web-3.1.0.RC2.jar

3.3)创建如下包,放置登录验证过滤器代码:

com.xxx.security

3.4)在src下创建Spring配置文件applicationContext-security.xml,内容如下:

Xml代码

xmlns:b="" xmlns:beans=""  

xmlns:xsi=""  

xsi:schemaLocation="   

 ; 

3.5)在web.xml中加入security配置,如下:

Xml代码

xmlns=""   

xmlns:xsi=""   

xsi:schemaLocation="   

;  

contextConfigLocation  

/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml 

springSecurityFilterChain  

org.springframework.web.filter.DelegatingFilterProxy 

springSecurityFilterChain 

org.springframework.web.context.ContextLoaderListener 

7、在com.xxx.security包下创建登录验证过滤器,该过滤器可用于在管理员登录时进行日志记录等相关操作,包括两个类:

LoginUsernamePasswordAuthenticationFilter

LoginSuccessHandler

7.1)LoginUsernamePasswordAuthenticationFilter代码如下:

Java代码

package com.xxx.security;  

import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; 

public class LoginUsernamePasswordAuthenticationFilter extends  

        UsernamePasswordAuthenticationFilter { 

7.2)LoginSuccessHandler代码如下:

Java代码

package com.xxx.security; 

import java.io.IOException;  

import javax.servlet.ServletException;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

import org.springframework.security.core.Authentication;  

import org.springframework.security.core.userdetails.UserDetails;  

import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; 

/**

 * 处理管理员登录日志

 *

 */  

public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler{ 

@Override  

public void onAuthenticationSuccess(HttpServletRequest request,  

HttpServletResponse response, Authentication authentication)throws IOException,  

            ServletException { 

        UserDetails userDetails = (UserDetails)authentication.getPrincipal(); 

       //输出登录提示信息 

       super.onAuthenticationSuccess(request, response, authentication);  

    } 

8、在applicationContext-security.xml中加入权限管理配置,如下:

Xml代码

xmlns:b="" xmlns:beans=""  

xmlns:xsi=""  

xsi:schemaLocation="   

 ; 

default-target-url="/manager/films.jsp"  

authentication-failure-url="/login.jsp?error=true" /> 

delete-cookies="JSESSIONID" /> 

                直接使用SQL语句查询登录帐号对应权限,  

                users-by-username-query:查询登录用户是否存在  

                authorities-by-username-query:查询登录用户权限(登录用户可以不属于任何组,从t_user_role表中获取权限)  

                group-authorities-by-username-query:查询登录用户所在组的权限 

group-authorities-by-username-query="SELECT g.id,g.groupname,role.role  

                             FROM t_group AS g   

LEFT OUTER JOIN t_group_role AS grouprole ON (g.id = grouprole.groupid)  

LEFT OUTER JOIN t_role AS role ON (role.id = grouprole.roleid)  

LEFT OUTER JOIN t_group_user AS groupuser on (g.id = groupuser.groupid)  

LEFT OUTER JOIN t_admin ON (t_admin.id = groupuser.userid)  

WHEREt_admin.nickname = ?"  

users-by-username-query="SELECT t_admin.nickname AS username,t_admin.passwd as password,'true' AS enabled  

                             FROM t_admin  

WHEREt_admin.nickname = ?"  

authorities-by-username-query="SELECT t_admin.nickname AS username,role.role as authorities  

                               FROM t_admin   

LEFT OUTER JOIN t_user_role AS userrole ON(t_admin.id = userrole.userid)  

LEFT OUTER JOIN t_role AS role ON (userrole.roleid = role.id)  

WHEREt_admin.nickname = ?" /> 

class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  

value="classpath:org/springframework/security/messages" />   

/manager/films.jsp 

/login.jsp?error=true   

9、为影片页面films.jsp定制操作权限,定制后,不同的帐号登录会看到不同的操作,

比如,帐号"admin"属于权限组"Administrator",具备权限"ROLE_ADMIN",登录后

可以看到所有操作,帐号"test"属于权限组"影片维护",具备权限"ROLE_UPDATE_FILM"

和"ROLE_ADD_FILM",登录后只能看到"添加影片信息"和"修改"操作

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:澳门新浦京娱乐场网站YII2框架便捷快速的实现用