vyuldashev / nova-permission

A Laravel Nova tool for Spatie's laravel-permission library
https://novapackages.com/packages/vyuldashev/nova-permission
419 stars 217 forks source link

Permission names #21

Closed VTumanov closed 6 years ago

VTumanov commented 6 years ago

Thanks, good nova module!

I see one trouble with it. If i want give readable names for permissions, i have long names in my code. And If i want give short names for better code - swears editor, because he not understand some things. Situation is aggravated when the Manager does not know english permissions names.

Maybe add a column "title" to display in the interface and a column "name" to use in the code?

vyuldashev commented 6 years ago

Hello, I think you should propose this feature request to spatie/laravel-permission, if they will add this, we will definitely include it in this library.

drbyte commented 6 years ago

Without extending the package, you could add a layer that uses the __() translation helper.

vyuldashev commented 6 years ago

@drbyte in some projects I also create a display_name column in permissions and roles tables for such purposes. If Spatie will add it, it would be awesome

drbyte commented 6 years ago

It's being considered for v3, but nothing confirmed yet.

VTumanov commented 6 years ago

May be create own table for this and add hasOne relation? Or make your own migration for spatie permissions table, with adding title column. I think we can long wait for Spatie, if they coding v3. This title needed only in Nova, not in other project code, so it not require "native support" from Spatie.

vyuldashev commented 6 years ago

I have a solution for now.

In \Vyuldashev\NovaPermission\Permission we add displayUsing call with callback which will return translation:

 Text::make(__('nova-permission-tool::permissions.name'), 'name')
    // ...
    ->displayUsing(function ($value) {
        return __('nova-permission-tool::permissions.names.' . $value);
    }),

In project's resources/lang/vendor/nova-permission-tool/en/permissions.php we add for example:

<?php

return [
    'name' => 'Name',
    'guard_name' => 'Guard Name',
    'created_at' => 'Created at',
    'updated_at' => 'Updated at',

    'names' => [
        'users-create' => 'Create Users',
    ],
];

Which will lead to this:

screen shot 2018-08-28 at 23 33 25

The same implementation can be applied for roles. If Spatie adds translatable option for permission and role names we will switch to it.

Waiting for feedback from @drbyte and @VTumanov.

VTumanov commented 6 years ago

I think it well be more useful if use two different columns. One for Users, second for Developers, they can check permissions keys with this page.

vyuldashev commented 6 years ago

We can make a computed field then.

VTumanov commented 6 years ago

Then it looks great! Thanks Bro!

vyuldashev commented 6 years ago

@VTumanov

Just tagged v1.2.0. Check it out. You need to create in resources/lang/vendor/nova-permission-tool/en/permissions.php display_names array where key stands for permission name and value for display value. It wont show Display Name column until there is at least one value.

VTumanov commented 6 years ago

Today i use this future, all good and work!

For other coders: in lang file you need use display_names instead names like in upper example

drbyte commented 6 years ago

I think it well be more useful if use two different columns. One for Users, second for Developers, they can check permissions keys with this page.

The existing name field should be the one used "by developers", since it's the one closed to "your app code". If you need to display it differently for "users"/whatever, you can either use the translation functions or add a separate field to the db and manage that field in your own app.