Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check all 6 collections when select set as admin for 6 #4652

Merged
merged 12 commits into from
May 21, 2024
Merged
3 changes: 2 additions & 1 deletion specifyweb/context/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ def set_users_collections_for_sp6(cursor, user, collectionids):
cursor.execute("delete specifyuser_spprincipal "
"from specifyuser_spprincipal "
"join spprincipal using (spprincipalid) "
"where specifyuserid = %s and usergroupscopeid not in %s",
"where specifyuserid = %s and usergroupscopeid not in %s"
"and spprincipal.Name != 'Administrator'",
[user.id, collectionids])

# Next delete the joins from the principals to any permissions.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,31 @@ import { useResource } from '../../hooks/resource';
import { userText } from '../../localization/user';
import { ajax } from '../../utils/ajax';
import { formData } from '../../utils/ajax/helpers';
import { ping } from '../../utils/ajax/ping';
import type { RA } from '../../utils/types';
import { Button } from '../Atoms/Button';
import { LoadingContext } from '../Core/Contexts';
import type { SerializedResource } from '../DataModel/helperTypes';
import type { SpecifyResource } from '../DataModel/legacyTypes';
import type { SpecifyUser } from '../DataModel/types';
import type { Collection, SpecifyUser } from '../DataModel/types';
import { userInformation } from '../InitialContext/userInformation';
import { hasPermission } from '../Permissions/helpers';

export function AdminStatusPlugin({
user: resource,
isAdmin,
onChange: handleChange,
collections,
}: {
readonly user: SpecifyResource<SpecifyUser>;
readonly isAdmin: boolean;
readonly onChange: (isAdmin: boolean) => void;
readonly collections: RA<SerializedResource<Collection>>;
}): JSX.Element {
const loading = React.useContext(LoadingContext);
const [user] = useResource(resource);
const isCurrentUser = userInformation.id === user.id;

const allCollectionIds = collections?.map((collection) => collection.id);
return (
<Button.Small
className="w-fit"
Expand Down Expand Up @@ -60,7 +65,19 @@ export function AdminStatusPlugin({
headers: {
Accept: 'text/plain',
},
}).then(({ data }) => handleChange(data === 'true'))
})
.then(({ data }) => {
handleChange(data === 'true');
return data;
})
.then((data) => {
data === 'true'
? ping(`/context/user_collection_access_for_sp6/${user.id}/`, {
method: 'PUT',
body: allCollectionIds,
})
: undefined;
})
)
}
>
Expand Down
5 changes: 4 additions & 1 deletion specifyweb/frontend/js_src/lib/components/Security/User.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,10 @@ function UserView({
)}
</SetPermissionContext>
<ErrorBoundary dismissible>
<LegacyPermissions userResource={userResource} />
<LegacyPermissions
userResource={userResource}
collections={collections}
/>
</ErrorBoundary>
</>,
'-mx-4 p-4 pt-0 flex-1 gap-8 [&_input]:max-w-[min(100%,var(--max-field-width))] overflow-auto'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import { Input, Label } from '../Atoms/Form';
import { Link } from '../Atoms/Link';
import { ReadOnlyContext } from '../Core/Contexts';
import { getField } from '../DataModel/helpers';
import type { SerializedResource } from '../DataModel/helperTypes';
import type { SpecifyResource } from '../DataModel/legacyTypes';
import { tables } from '../DataModel/tables';
import type { SpecifyUser } from '../DataModel/types';
import type { Collection, SpecifyUser } from '../DataModel/types';
import { Combobox } from '../FormFields/ComboBox';
import { userInformation } from '../InitialContext/userInformation';
import { Dialog } from '../Molecules/Dialog';
Expand Down Expand Up @@ -224,8 +225,10 @@ export function UserIdentityProviders({

export function LegacyPermissions({
userResource,
collections,
}: {
readonly userResource: SpecifyResource<SpecifyUser>;
readonly collections: RA<SerializedResource<Collection>>;
}): JSX.Element {
const admins = useAdmins();
const [isAdmin, setIsAdmin] = useLiveState(
Expand All @@ -241,6 +244,7 @@ export function LegacyPermissions({
{hasPermission('/permissions/list_admins', 'read') && (
<div className="flex gap-2">
<AdminStatusPlugin
collections={collections}
isAdmin={isAdmin}
user={userResource}
onChange={setIsAdmin}
Expand All @@ -257,7 +261,7 @@ export function LegacyPermissions({
>
{userType.label}
<Combobox
defaultValue={undefined}
defaultValue={userResource.get('userType') || undefined}
field={userType}
id={undefined}
isDisabled={false}
Expand Down