__PACKAGE__->many_to_many( roles => 'map_user_role', 'role');
+use Set::Object;
+
+sub t_check_roles {
+ my ( $self, $roles, $wanted_roles ) = @_;
+
+ if ( grep { $_ eq 'superadmin' } @$roles ) {
+ return 1;
+ }
+
+ my $have = Set::Object->new(@$roles);
+ my $need = Set::Object->new(@$wanted_roles);
+
+ if ( $have->superset($need) ) {
+ return 1;
+ }
+}
+
+sub t_check_roles_any {
+ my ( $self, $roles, $wanted_roles ) = @_;
+
+ if ( grep { $_ eq 'superadmin' } @$roles ) {
+ return 1;
+ }
+
+ my $have = Set::Object->new(@$roles);
+ my $need = Set::Object->new(@$wanted_roles);
+
+ if ( $have->intersection($need)->size > 0 ) {
+ return 1;
+ }
+}
+
1;