发表于: 2018-09-10 23:40:23
2 444
今天完成的事情
1.继续学习shiro
1.1授权有两种,一种是基于角色,一种是基于资源
基于资源授权,先写ini配置文件
[users]
zhang=123,role1,role2
wang=123,role1
li=123,role41,role42,role51,role52,role53,role61,role62,role71,role72,role73,role74,role75,role81,role82
[roles]
#对资源user拥有create、update权限
role1=user:create,user:update
#对资源user拥有create、delete权限
role2=user:create,user:delete
#对资源user拥有create权限
role3=system:user:create
#对资源user拥有update、delete权限
role41=system:user:update,system:user:delete
#对资源user拥有update、delete权限(简写,但不等价)
role42="system:user:update,delete"
#对资源system:user拥有create、update、delete、view权限
role51="system:user:create,update,delete,view"
#对资源system:user拥有所有权限
role52=system:user:*
#对资源system:user拥有所有权限
role53=system:user
#对资源拥有所有权限(如匹配user:view)
role61=*:view
#对资源拥有所有权限(如匹配system:user:view,即和之上的不等价)
role62=*:*:view
#对资源user的1实例拥有view权限
role71=user:view:1
#对资源user的1实例拥有update、delete权限
role72="user:update,delete:1"
#对资源user的1实例拥有所有权限
role73=user:*:1
#对资源user的所有实例拥有auth权限
role74=user:auth:*
#对资源user的所有实例拥有所有权限
role75=user:*:*
#等价于menu:*:*
role81=menu:*
role82=organization
规则:“资源标识符:操作:对象实例ID” 即对哪个资源的哪个实例可以进行什么操作。其默认支持通配符权限字符串,“:”表示资源/操作/实例的分割;“,”表示操作的分割;“*”表示任意资源/操作/实例。
如“user:view”等价于“user:view:*”;而“organization”等价于“organization:*”或者“organization:*:*”。可以这么理解,这种方式实现了前缀匹配。
另外如“user:*”可以匹配如“user:delete”、“user:delete”可以匹配如“user:delete:1”、“user:*:1”可以匹配如“user:view:1”、“user”可以匹配“user:view”或“user:view:1”等。即*可以匹配所有,不加*可以进行前缀匹配;但是如“*:view”不能匹配“system:user:view”,需要使用“*:*:view”,即后缀匹配必须指定前缀(多个冒号就需要多个*来匹配)。
1.2建个表:
delete from users;
delete from user_roles;
delete from roles_permissions;
insert into users(username, password, password_salt) values('zhang', '123', null);
insert into user_roles(username, role_name) values('zhang', 'role1');
insert into user_roles(username, role_name) values('zhang', 'role2');
insert into roles_permissions(role_name, permission) values('role1', '+user1+10');
insert into roles_permissions(role_name, permission) values('role1', 'user1:*');
insert into roles_permissions(role_name, permission) values('role1', '+user2+10');
insert into roles_permissions(role_name, permission) values('role1', 'user2:*');
1.3测试
package com.github.zhangkaitao.shiro.chapter3;
import junit.framework.Assert;
import org.apache.shiro.authz.UnauthorizedException;
import org.apache.shiro.authz.permission.WildcardPermission;
import org.junit.Test;
public class PermissionTest extends BaseTest {
@Test
public void testIsPermitted() {
login("classpath:shiro-permission.ini", "zhang", "123");
//判断拥有权限:user:create
Assert.assertTrue(subject().isPermitted("user:create"));
//判断拥有权限:user:update and user:delete
Assert.assertTrue(subject().isPermittedAll("user:update", "user:delete"));
//判断没有权限:user:view
Assert.assertFalse(subject().isPermitted("user:view"));
}
@Test(expected = UnauthorizedException.class)
public void testCheckPermission() {
login("classpath:shiro-permission.ini", "zhang", "123");
//断言拥有权限:user:create
subject().checkPermission("user:create");
//断言拥有权限:user:delete and user:update
subject().checkPermissions("user:delete", "user:update");
//断言拥有权限:user:view 失败抛出异常
subject().checkPermissions("user:view");
}
@Test
public void testWildcardPermission1() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermissions("system:user:update", "system:user:delete");
subject().checkPermissions("system:user:update,delete");
}
@Test
public void testWildcardPermission2() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermissions("system:user:create,delete,update:view");
subject().checkPermissions("system:user:*");
subject().checkPermissions("system:user");
}
@Test
public void testWildcardPermission3() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermissions("user:view");
subject().checkPermissions("system:user:view");
}
@Test
public void testWildcardPermission4() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermissions("user:view:1");
subject().checkPermissions("user:delete,update:1");
subject().checkPermissions("user:update:1", "user:delete:1");
subject().checkPermissions("user:update:1", "user:delete:1", "user:view:1");
subject().checkPermissions("user:auth:1", "user:auth:2");
}
@Test
public void testWildcardPermission5() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermissions("menu:view:1");
subject().checkPermissions("organization");
subject().checkPermissions("organization:view");
subject().checkPermissions("organization:view:1");
}
@Test
public void testWildcardPermission6() {
login("classpath:shiro-permission.ini", "li", "123");
subject().checkPermission("menu:view:1");
subject().checkPermission(new WildcardPermission("menu:view:1"));
}
}
明天计划的事情
请假休息一天
遇到的问题
暂无
收获
如上
评论