yetki_flutter 0.1.0 copy "yetki_flutter: ^0.1.0" to clipboard
yetki_flutter: ^0.1.0 copied to clipboard

Flutter bindings for the yetki RBAC library: scope, permission and role guard widgets, a router refresh listenable and shared_preferences storage.

example/example.dart

import 'package:flutter/material.dart';
import 'package:yetki_flutter/yetki_flutter.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Restore the cached policy before the first frame, so that no change can
  // race with loading it.
  final yetki = await Yetki.create(storage: SharedPreferencesYetkiStorage());

  // In a real app the policy usually comes from your backend:
  //   yetki.importFromJson(await api.fetchPolicy());
  if (yetki.roles.isEmpty) {
    yetki
      ..addPermissions(const [
        Permission(id: 'dashboard.view', name: 'View dashboard'),
        Permission(id: 'users.manage', name: 'Manage users'),
      ])
      ..addRoles([
        Role(id: 'member', permissions: {'dashboard.view'}),
        Role(id: 'admin', permissions: {'users.*'}, inherits: {'member'}),
      ]);
  }

  runApp(YetkiScope(yetki: yetki, child: const ExampleApp()));
}

/// Demonstrates guard widgets reacting to user changes.
class ExampleApp extends StatelessWidget {
  /// Creates the example app.
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('yetki example')),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            spacing: 16,
            children: [
              YetkiBuilder(
                builder: (context, yetki) => Text(
                  'Signed in as: ${yetki.currentUser?.name ?? 'nobody'}',
                ),
              ),
              const PermissionGuard(
                permission: 'dashboard.view',
                fallback: Text('Sign in to see the dashboard'),
                child: Text('📊 Dashboard'),
              ),
              const PermissionGuard(
                permission: 'users.manage',
                child: Text('👥 User management'),
              ),
              Wrap(
                spacing: 8,
                children: [
                  FilledButton(
                    onPressed: () => context.yetki.setUser(
                      YetkiUser(id: '1', name: 'Member', roles: {'member'}),
                    ),
                    child: const Text('Sign in as member'),
                  ),
                  FilledButton(
                    onPressed: () => context.yetki.setUser(
                      YetkiUser(id: '2', name: 'Admin', roles: {'admin'}),
                    ),
                    child: const Text('Sign in as admin'),
                  ),
                  OutlinedButton(
                    onPressed: context.yetki.clearUser,
                    child: const Text('Sign out'),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
0
likes
160
points
64
downloads

Documentation

API reference

Publisher

verified publisherenver.dev

Weekly Downloads

Flutter bindings for the yetki RBAC library: scope, permission and role guard widgets, a router refresh listenable and shared_preferences storage.

Repository (GitHub)
View/report issues

Topics

#rbac #permissions #authorization #access-control #roles

License

MIT (license)

Dependencies

flutter, shared_preferences, yetki

More

Packages that depend on yetki_flutter